spring老项目转springboot项目详细步骤

2019-12-03 16:41:51

参考地址 spring老项目转springboot项目 笔记

引入jar包

先不删除老的jar包

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

 

复制代码

  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- log4j -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>

            <!-- 这个是剔除掉自带的 tomcat部署的-->
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>

        </dependency>
        <!-- tomcat容器部署 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <!--<scope>compile</scope>-->
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- 支持 @ConfigurationProperties 注解 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>

复制代码

spring boot打包的插件

复制代码

  <build>
        <finalName>MIS</finalName>
        <!-- maven 打包不全(xml,properties文件没打进包)解决方案-->
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*</include>
                </includes>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.5.9.RELEASE</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

复制代码

 

创建springboot主类

复制代码

package com.guige;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan({"com.guige.oim.v2.*"})public class Application extends SpringBootServletInitializer {

    @Override    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {        return application.sources(Application.class);
    }    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);
    }
}

复制代码

 

创建application.properties文件

复制代码

#默认前缀
server.contextPath=/#数据源
spring.datasource.name=adminDataSource
spring.datasource.driverClassName = oracle.jdbc.OracleDriver
spring.datasource.url = spring.datasource.username = spring.datasource.password =

复制代码

 

1.先把web.xml去掉

创建core包

web.xml里的servlet转成bean形式

filter也一样

创建WebConfig配置类

复制代码

package com.guige.core.conf;

import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import com.guige.core.ext.i18n.filter.LocaleFilter;
import com.guige.mis.filter.JspFilter;
import com.guige.mis.listener.ContextListener;
import com.guige.mis.listener.OnlineUserListener;
import com.guige.oim.filter.CORSFilter;
import com.guige.oim.servlet.*;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.DispatcherServlet;/**
 * 对应web.xml
 *
 * @author songaw
 * @date 2018/7/17 9:10 */@Configurationpublic class WebConfig {    //----------------------Filter    //跨域过滤器    @Bean    public FilterRegistrationBean corsRegistrationBean() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new CORSFilter());
        filterRegistrationBean.addUrlPatterns("/*");        return filterRegistrationBean;
    }    //字符集utf-8    @Bean    public FilterRegistrationBean characterRegistrationBean() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        characterEncodingFilter.setForceEncoding(true);
        filterRegistrationBean.setFilter(characterEncodingFilter);
        filterRegistrationBean.addUrlPatterns("/*");        //filterRegistrationBean.addInitParameter("encoding", "UTF-8");       // filterRegistrationBean.addInitParameter("ForceEncoding", "true");
        return filterRegistrationBean;
    }    //对jsp进行权限日志过滤    @Bean    public FilterRegistrationBean jspFilterRegistrationBean() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        JspFilter jspFilter = new JspFilter();
        filterRegistrationBean.setFilter(jspFilter);
        filterRegistrationBean.addUrlPatterns("*.do");        return filterRegistrationBean;
    }    /**
     * 如果session中没有设置locale串或者locale串不合法,默认采用request的locale,
     * @return     */
    @Bean    public FilterRegistrationBean localeRegistrationBean() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new LocaleFilter());
        filterRegistrationBean.addUrlPatterns("*.do");        return filterRegistrationBean;
    }    //阿里druid界面设置    @Bean    public FilterRegistrationBean webStatFilterRegistrationBean() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new WebStatFilter());
        filterRegistrationBean.addUrlPatterns("/*");
        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");        return filterRegistrationBean;
    }    //--------------------------------Listener
    @Bean    public ServletListenerRegistrationBean<OnlineUserListener> onlineUserListenerRegistrationBean(){
        ServletListenerRegistrationBean<OnlineUserListener>
                sessionListener = new ServletListenerRegistrationBean<OnlineUserListener>(new OnlineUserListener());        return sessionListener;

    }
    @Bean    public ServletListenerRegistrationBean<ContextListener> contextListenerRegistrationBean(){
        ServletListenerRegistrationBean<ContextListener>
                sessionListener = new ServletListenerRegistrationBean<ContextListener>(new ContextListener());        return sessionListener;

    }//    --------------------------------------Servlet
    @Bean    public ServletRegistrationBean dispatcher() {

        ServletRegistrationBean reg = new ServletRegistrationBean();
        DispatcherServlet dispatcherServlet = new DispatcherServlet();
        dispatcherServlet.setContextConfigLocation("classpath:config/core/spring-mvc.xml," +                " classpath:config/core/dao/dao_authority.xml," +                " classpath:config/core/dao/dao_manager.xml," +                " classpath:config/core/dao/dao_oim.xml," +                " classpath:config/core/dao/dao_oim_v2.xml," +                " classpath:config/core/dao/dao_orgacus.xml," +                " classpath:config/core/service/service_authority.xml," +                " classpath:config/core/service/service_manager.xml," +                " classpath:config/core/service/service_oim.xml," +                " classpath:config/core/service/service_oim_v2.xml," +                " classpath:config/core/service/service_orgacus.xml," +                " classpath:config/client/i18n.xml," +                " classpath:config/client/http.xml," +                " classpath:config/client/action/action_main.xml," +                " classpath:config/client/action/action_authority.xml," +                " classpath:config/client/action/action_manager.xml," +                " classpath:config/client/action/action_oim.xml," +                " classpath:config/client/action/action_oim_v2.xml," +                " classpath:config/client/action/action_orgacus.xml");
        reg.setServlet(dispatcherServlet);
        reg.addUrlMappings("*.do");
        reg.setLoadOnStartup(30);        return reg;
    }  
    //阿里druid界面设置    @Bean    public ServletRegistrationBean statViewServlet() {

        ServletRegistrationBean reg = new ServletRegistrationBean();
        reg.setServlet(new StatViewServlet());
        reg.addUrlMappings("/druid/*");
        reg.addInitParameter("loginUsername", "111");
        reg.addInitParameter("loginPassword", "111");        return reg;
    }

}

复制代码

 

 

2.spring mvc文件

里面的bean 转成声明试bean

复制代码

package com.guige.core.conf;

import com.alibaba.druid.support.http.WebStatFilter;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.guige.oim.filter.CORSFilter;
import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.boot.web.servlet.ErrorPage;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.*;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.resource.ContentVersionStrategy;
import org.springframework.web.servlet.resource.VersionResourceResolver;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

@Configurationpublic class WebMvcConfig extends WebMvcConfigurerAdapter {    /**
     * 添加拦截器
     * @param registry     */
    @Override    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LocaleChangeInterceptor());    //    registry.addInterceptor(webInterceptor());    }    /**
     *
     * @param converters     */
    @Override    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {        //用来忽略json对象传入,反序列化时候属性名称不正确导致序列化失败的bug
        MappingJackson2HttpMessageConverter jacksonMessageConverter = new MappingJackson2HttpMessageConverter();
        List<MediaType> supportedMediaTypes =new ArrayList<>();//        避免IE执行AJAX时,返回JSON出现下载文件        supportedMediaTypes.add(MediaType.TEXT_HTML);
        jacksonMessageConverter.setSupportedMediaTypes(supportedMediaTypes);
        ObjectMapper mapper = jacksonMessageConverter.getObjectMapper();
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        converters.add(jacksonMessageConverter);
    }

    @Override    public void configureViewResolvers(ViewResolverRegistry registry) {
        registry.viewResolver(this.getViewResolver());        //MappingJsonView jsonView = new MappingJsonView();    //    registry.enableContentNegotiation(jsonView);    }

    @Bean    public ViewResolver getViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setViewClass(JstlView.class);
        resolver.setPrefix("/WEB-INF/jsp/");
        resolver.setSuffix(".jsp");
        resolver.setOrder(1);        return resolver;
    }
    @Override    public void addViewControllers(ViewControllerRegistry registry){
        registry.addViewController("/").setViewName("forward:/login.html");
    }
    @Override    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        VersionResourceResolver versionResourceResolver = new VersionResourceResolver();
        versionResourceResolver.addVersionStrategy(new ContentVersionStrategy(), "/**");
        registry.addResourceHandler("/resources/**")
                .addResourceLocations("/resources/")
                .resourceChain(true)
                .addResolver(versionResourceResolver);
    }

    @Bean    public EmbeddedServletContainerFactory servletContainer() {
        TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
        factory.setSessionTimeout(14400, TimeUnit.SECONDS);
        ErrorPage ep1 = new ErrorPage(HttpStatus.NOT_FOUND, "/index.html");        return factory;
    }

}

复制代码

 

3. spring.xml转配置文件


  • 2019-07-30 22:36:10

    使用 Spring Initializr 初始化 Spring Boot 项目

    万事开头难,你需要设置一个目录结构存放各种项目内容,创建构建文件,并在其中加入各 种依赖。Spring Boot CLI消除了不少设置工作,但如果你更倾向于传统Java项目结构,那你应该 看看Spring Initializr。

  • 2019-08-06 15:30:08

    小程序展示富文本

    然而rich-text有个问题,它不能够给内联img设置宽度100%,这样图片就容易溢出屏幕。我们只能在后台返回富文本的时候对图片的img标签进行格式化。或者前端进行格式化也行,我赞成使用后端,因为很多种情况我们不一定都能想得到。

  • 2019-08-07 09:07:32

    最全的Service Worker讲解

    Service Worker 最主要的特点是:在页面中注册并安装成功后,运行于浏览器后台,不受页面刷新的影响,可以监听和截拦作用域范围内所有页面的 HTTP 请求。 基于 Service Worker API 的特性,结合 Fetch API、Cache API、Push API、postMessage API 和 Notification API,可以在基于浏览器的 web 应用中实现如离线缓存、消息推送、静默更新等 native 应用常见的功能,以给 web 应用提供更好更丰富的使用体验。

  • 2019-08-07 09:09:19

    windows系统下定时关闭程序

    其中xxx.exe是你要关闭的进程中运行的exe,可以ctrl+alt+del打开任务管理器,进到详细信息查看 然后把.txt文件后缀改成.bat(此时要在查看一栏勾上文件拓展名,要不还是txt文档)

  • 2019-08-07 09:16:43

    一个比较完美的PWA例子

    但就目前来讲,PWA是Google主推的一项技术标准,FireFox,Chrome以及一些基于Blink的浏览器已经支持渐进式Web应用了,Edge上对渐进式Web应用的支持还在开发。Apple公司也表示会考虑在自己Safari支持PWA。然而这项功能已经进入了WebKit内核的五年计划中。长期来看,对浏览器兼容性的支持方面应该已经不算太大问题了。况且在现阶段,在不支持渐进式Web应用的浏览器中,你的应用也只是无法使用渐进式Web应用的离线功能而已,除此之外的功能均可以正常使用。

  • 2019-08-07 09:57:48

    spring data jpa 实体类中字段不与数据库表映射

    当我们使用spring data jpa开发的时候,会将实体类中的成员变量与表中的字段一一对应,当我们在实体类中加上一个不与数据库表一一对应的成员变量的时候,此时我们只要在这个成员变量上加上注解@Transient @

  • 2019-08-07 17:16:53

    如何在 Node.js 中使用 import / export 的三种方法

    因为一些历史原因,虽然 Node.js 已经实现了 99% 的 ES6 新特性,不过截止 2018.8.10,How To Enable ES6 Imports in Node.JS 仍然是老大难问题,下面我来介绍三种方法可以让我们在 Node.js 中使用 import/export 。