欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Sprigmvc項(xiàng)目轉(zhuǎn)為springboot的方法

 更新時(shí)間:2018年02月07日 09:15:07   作者:geeksblog  
本篇文章主要介紹了Sprigmvc項(xiàng)目轉(zhuǎn)為springboot的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

是否有老掉牙的springmvc項(xiàng)目,想轉(zhuǎn)成springboot項(xiàng)目,看這個(gè)文章就對(duì)了。

說(shuō)明

如果你的項(xiàng)目連maven項(xiàng)目都不是,請(qǐng)自行轉(zhuǎn)為maven項(xiàng)目,在按照本教程進(jìn)行。

本教程適用于spring+springmvc+mybatis+shiro的maven項(xiàng)目。

1.修改pom文件依賴(lài)

刪除之前的spring依賴(lài),添加springboot依賴(lài)

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version>
</parent>
<dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</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>

      <!-- 這個(gè)是剔除掉自帶的 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.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>1.3.0</version>
    </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>
</dependencies>

添加springboot構(gòu)建插件

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
      <source>1.7</source>
      <target>1.7</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>

2.添加application啟動(dòng)文件

注意,如果Application在controller,service,dao的上一層包里,無(wú)需配置 @ComponentScan ,

否則,需要指明要掃描的包。

@SpringBootApplication
//@ComponentScan({"com.cms.controller","com.cms.service","com.cms.dao"})
public class Applicationextends 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);
  }
}

3.添加springboot配置文件

在resources下面添加application.properties文件

添加基本配置
#默認(rèn)前綴
server.contextPath=/
# 指定環(huán)境
spring.profiles.active=local
# jsp配置
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
#log配置文件
logging.config=classpath:logback-cms.xml
#log路徑
logging.path=/Users/mac/work-tommy/cms-springboot/logs/
#數(shù)據(jù)源
spring.datasource.name=adminDataSource
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/mycms?useUnicode=true&autoReconnect=true&characterEncoding=utf-8
spring.datasource.username = root
spring.datasource.password = 123456

4.使用@Configuration注入配置

注入mybatis配置,分頁(yè)插件請(qǐng)自主選擇

@Configuration
@MapperScan(basePackages = "com.kuwo.dao",sqlSessionTemplateRef = "adminSqlSessionTemplate")
public class AdminDataSourceConfig{

  @Bean(name = "adminDataSource")
  @ConfigurationProperties(prefix = "spring.datasource")
  @Primary
  public DataSource adminDataSource(){
    return DataSourceBuilder.create().build();
  }

  @Bean(name = "adminSqlSessionFactory")
  @Primary
  public SqlSessionFactory adminSqlSessionFactory(@Qualifier("adminDataSource")DataSource dataSource)throws Exception {
    SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
    bean.setDataSource(dataSource);
    //分頁(yè)插件
// PageHelper pageHelper = new PageHelper();
    PagePlugin pagePlugin = new PagePlugin();
// Properties props = new Properties();
// props.setProperty("reasonable", "true");
// props.setProperty("supportMethodsArguments", "true");
// props.setProperty("returnPageInfo", "check");
// props.setProperty("params", "count=countSql");
// pageHelper.setProperties(props);
    //添加插件
    bean.setPlugins(new Interceptor[]{pagePlugin});
    // 添加mybatis配置文件
    bean.setConfigLocation(new DefaultResourceLoader().getResource("classpath:mybatis/mybatis-config.xml"));
    // 添加mybatis映射文件
    bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/system/*.xml"));
    return bean.getObject();
  }

  @Bean(name = "adminTransactionManager")
  @Primary
  public DataSourceTransactionManager adminTransactionManager(@Qualifier("adminDataSource")DataSource dataSource){
    return new DataSourceTransactionManager(dataSource);
  }

  @Bean(name = "adminSqlSessionTemplate")
  @Primary
  public SqlSessionTemplate adminSqlSessionTemplate(@Qualifier("adminSqlSessionFactory")SqlSessionFactory sqlSessionFactory)throws Exception {
    return new SqlSessionTemplate(sqlSessionFactory);
  }
}

添加Interceptor配置,注意addInterceptor的順序,不要搞亂了

@Configuration
public class InterceptorConfigurationextends WebMvcConfigurerAdapter{
  @Override
  public void addInterceptors(InterceptorRegistry registry){
    registry.addInterceptor(new LoginHandlerInterceptor());
  }
}

添加shiro配置文件

注意:本來(lái)使用redis做session緩存,但是和shiro集成發(fā)現(xiàn)一個(gè)問(wèn)題,user對(duì)象存儲(chǔ)以后,從shiro中獲取后,無(wú)法進(jìn)行類(lèi)型轉(zhuǎn)換,所以暫時(shí)放棄了redis做session緩存。

@Configuration
public class ShiroConfiguration{
  @Value("${spring.redis.host}")
  private String host;

  @Value("${spring.redis.port}")
  private int port;

  @Value("${spring.redis.timeout}")
  private int timeout;
  @Bean
  public static LifecycleBeanPostProcessor getLifecycleBeanPostProcessor(){
    return new LifecycleBeanPostProcessor();
  }

  /**
   * ShiroFilterFactoryBean 處理攔截資源文件問(wèn)題。
   * 注意:?jiǎn)为?dú)一個(gè)ShiroFilterFactoryBean配置是或報(bào)錯(cuò)的,因?yàn)樵?
   * 初始化ShiroFilterFactoryBean的時(shí)候需要注入:SecurityManager
   *
   Filter Chain定義說(shuō)明
   1、一個(gè)URL可以配置多個(gè)Filter,使用逗號(hào)分隔
   2、當(dāng)設(shè)置多個(gè)過(guò)濾器時(shí),全部驗(yàn)證通過(guò),才視為通過(guò)
   3、部分過(guò)濾器可指定參數(shù),如perms,roles
   *
   */
  @Bean
  public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager){
    System.out.println("ShiroConfiguration.shirFilter()");
    ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();

    // 必須設(shè)置 SecurityManager
    shiroFilterFactoryBean.setSecurityManager(securityManager);
    // 如果不設(shè)置默認(rèn)會(huì)自動(dòng)尋找Web工程根目錄下的"/login.jsp"頁(yè)面
    shiroFilterFactoryBean.setLoginUrl("/login_toLogin");
    // 登錄成功后要跳轉(zhuǎn)的鏈接
    shiroFilterFactoryBean.setSuccessUrl("/usersPage");
    //未授權(quán)界面;
    shiroFilterFactoryBean.setUnauthorizedUrl("/403");
    //攔截器.
    Map<String,String> filterChainDefinitionMap = new LinkedHashMap<>();

    //配置退出 過(guò)濾器,其中的具體的退出代碼Shiro已經(jīng)替我們實(shí)現(xiàn)了
    filterChainDefinitionMap.put("/logout", "logout");
    filterChainDefinitionMap.put("/login_toLogin", "anon");
    filterChainDefinitionMap.put("/login_login", "anon");
    filterChainDefinitionMap.put("/static/login/**","anon");
    filterChainDefinitionMap.put("/static/js/**","anon");
    filterChainDefinitionMap.put("/uploadFiles/uploadImgs/**","anon");
    filterChainDefinitionMap.put("/code.do","anon");
    filterChainDefinitionMap.put("/font-awesome/**","anon");
    //<!-- 過(guò)濾鏈定義,從上向下順序執(zhí)行,一般將 /**放在最為下邊 -->:這是一個(gè)坑呢,一不小心代碼就不好使了;
    //<!-- authc:所有url都必須認(rèn)證通過(guò)才可以訪問(wèn); anon:所有url都都可以匿名訪問(wèn)-->

    filterChainDefinitionMap.put("/**", "authc");


    shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
    return shiroFilterFactoryBean;
  }


  @Bean
  public SecurityManager securityManager(){
    DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
    //設(shè)置realm.
    securityManager.setRealm(myShiroRealm());
    // 自定義緩存實(shí)現(xiàn) 使用redis
    //securityManager.setCacheManager(cacheManager());
    // 自定義session管理 使用redis
    securityManager.setSessionManager(sessionManager());
    return securityManager;
  }

  @Bean
  public ShiroRealm myShiroRealm(){
    ShiroRealm myShiroRealm = new ShiroRealm();
// myShiroRealm.setCredentialsMatcher(hashedCredentialsMatcher());
    return myShiroRealm;
  }

}
  /**
   * 開(kāi)啟shiro aop注解支持.
   * 使用代理方式;所以需要開(kāi)啟代碼支持;
   * @param securityManager
   * @return
   */
  @Bean
  public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager){
    AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
    authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
    return authorizationAttributeSourceAdvisor;
  }

  /**
   * 配置shiro redisManager
   * 使用的是shiro-redis開(kāi)源插件
   * @return
   */
  public RedisManager redisManager(){
    RedisManager redisManager = new RedisManager();
    redisManager.setHost(host);
    redisManager.setPort(port);
    redisManager.setExpire(1800);
    redisManager.setTimeout(timeout);
    // redisManager.setPassword(password);
    return redisManager;
  }

  /**
   * cacheManager 緩存 redis實(shí)現(xiàn)
   * 使用的是shiro-redis開(kāi)源插件
   * @return
   */
  public RedisCacheManager cacheManager(){
    RedisCacheManager redisCacheManager = new RedisCacheManager();
    redisCacheManager.setRedisManager(redisManager());
    return redisCacheManager;
  }

  /**
   * RedisSessionDAO shiro sessionDao層的實(shí)現(xiàn) 通過(guò)redis
   * 使用的是shiro-redis開(kāi)源插件
   */
  @Bean
  public RedisSessionDAO redisSessionDAO(){
    RedisSessionDAO redisSessionDAO = new RedisSessionDAO();
    redisSessionDAO.setRedisManager(redisManager());
    return redisSessionDAO;
  }

  @Bean
  public DefaultWebSessionManager sessionManager(){
    DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
// sessionManager.setSessionDAO(redisSessionDAO());
    return sessionManager;
  }

}

總結(jié)

搞了一天時(shí)間把項(xiàng)目轉(zhuǎn)成springboot,查閱各種資料,希望這篇文章能夠?yàn)槟銕?lái)幫助。也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot中@ConfigurationProperties實(shí)現(xiàn)配置自動(dòng)綁定的方法

    SpringBoot中@ConfigurationProperties實(shí)現(xiàn)配置自動(dòng)綁定的方法

    本文主要介紹了SpringBoot中@ConfigurationProperties實(shí)現(xiàn)配置自動(dòng)綁定的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • java如何獲取10位和13位時(shí)間戳

    java如何獲取10位和13位時(shí)間戳

    這篇文章主要介紹了java如何獲取10位和13位時(shí)間戳問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Java嵌入式開(kāi)發(fā)的優(yōu)勢(shì)及有點(diǎn)總結(jié)

    Java嵌入式開(kāi)發(fā)的優(yōu)勢(shì)及有點(diǎn)總結(jié)

    在本篇內(nèi)容里小編給大家整理了關(guān)于Java嵌入式開(kāi)發(fā)的優(yōu)勢(shì)及相關(guān)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們學(xué)習(xí)下。
    2022-11-11
  • Java中seata框架的XA模式詳解

    Java中seata框架的XA模式詳解

    這篇文章主要介紹了Java中seata框架的XA模式詳解,Seata?是一款開(kāi)源的分布式事務(wù)解決方案,致力于提供高性能和簡(jiǎn)單易用的分布式事務(wù)服務(wù),Seata?將為用戶提供了?AT、TCC、SAGA?和?XA?事務(wù)模式,為用戶打造一站式的分布式解決方案,需要的朋友可以參考下
    2023-08-08
  • 詳解Java8與Runtime.getRuntime().availableProcessors()

    詳解Java8與Runtime.getRuntime().availableProcessors()

    這篇文章主要介紹了詳解Java8與Runtime.getRuntime().availableProcessors(),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • java并發(fā)之ArrayBlockingQueue詳細(xì)介紹

    java并發(fā)之ArrayBlockingQueue詳細(xì)介紹

    這篇文章主要介紹了java并發(fā)之ArrayBlockingQueue詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • java泛型的局限探究及知識(shí)點(diǎn)總結(jié)

    java泛型的局限探究及知識(shí)點(diǎn)總結(jié)

    在本篇內(nèi)容里小編給大家分享的是一篇關(guān)于java泛型的局限探究及知識(shí)點(diǎn)總結(jié)內(nèi)容,有需要的朋友們可以跟著學(xué)習(xí)參考下。
    2021-07-07
  • log4j2使用filter過(guò)濾日志方式

    log4j2使用filter過(guò)濾日志方式

    這篇文章主要介紹了log4j2使用filter過(guò)濾日志方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java中final修飾符實(shí)例分析

    java中final修飾符實(shí)例分析

    本文通過(guò)實(shí)例向我們展示了java中final修飾符的概念,final修飾的基本變量和引用類(lèi)型變量的區(qū)別。有需要的小伙伴可以參考下
    2014-11-11
  • Spring Security Oauth2.0 實(shí)現(xiàn)短信驗(yàn)證碼登錄示例

    Spring Security Oauth2.0 實(shí)現(xiàn)短信驗(yàn)證碼登錄示例

    本篇文章主要介紹了Spring Security Oauth2.0 實(shí)現(xiàn)短信驗(yàn)證碼登錄示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01

最新評(píng)論