Sprigmvcプロジェクトをsprigbootに変える方法
古いスプリングmvcプロジェクトがあるかどうかは、springbootプロジェクトに変えたいです。この文章を見ればいいです。
説明
あなたのプロジェクトがmavenプロジェクトでもないなら、自分でmavenプロジェクトに変えてください。本教程に従って進行します。
このチュートリアルはspring+springmvc+mybatis+shiroのmavenプロジェクトに適用されます。
1.pomファイル依存性を変更する
以前のspring依存を削除し、springboot依存を追加します。
注意してください。もしApplicationがcontroller、service、daoの上の階のカバンにあるなら、@ComponentScanを配置する必要はありません。
スキャンするカバンを指定する必要があります。
resourceの下にappration.propertiesファイルを追加します。
mybatisの配置を注入して、改ページプラグインは自分で選んでください。
注意:本来はredisを使ってsessionキャッシュをしていましたが、shiroと統合して一つの問題を発見しました。userオブジェクトが格納されてから、shiroから取得した後、タイプ変換ができなくなりました。
一日の間にプロジェクトをspringbootに変えて、各種の資料を調べて、この文章があなたの助けになることを望みます。私たちを応援してください。
説明
あなたのプロジェクトがmavenプロジェクトでもないなら、自分でmavenプロジェクトに変えてください。本教程に従って進行します。
このチュートリアルはspring+springmvc+mybatis+shiroのmavenプロジェクトに適用されます。
1.pomファイル依存性を変更する
以前のspring依存を削除し、springboot依存を追加します。
<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>
<!-- 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>
スプリングブックを追加してプラグインを構築します。
<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がcontroller、service、daoの上の階のカバンにあるなら、@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プロファイルを追加するresourceの下にappration.propertiesファイルを追加します。
#
server.contextPath=/
#
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/
#
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.@Configrationで注入配置するmybatisの配置を注入して、改ページプラグインは自分で選んでください。
@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);
//
// 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);
}
}
Intercepterの配置を追加して、addIntercepterの順序に注意して、混乱させないようにしてください。
@Configuration
public class InterceptorConfigurationextends WebMvcConfigurerAdapter{
@Override
public void addInterceptors(InterceptorRegistry registry){
registry.addInterceptor(new LoginHandlerInterceptor());
}
}
shiroプロファイルを追加注意:本来はredisを使ってsessionキャッシュをしていましたが、shiroと統合して一つの問題を発見しました。userオブジェクトが格納されてから、shiroから取得した後、タイプ変換ができなくなりました。
@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 。
* : ShiroFilterFactoryBean ,
* ShiroFilterFactoryBean :SecurityManager
*
Filter Chain
1、 URL Filter,
2、 , ,
3、 , perms,roles
*
*/
@Bean
public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager){
System.out.println("ShiroConfiguration.shirFilter()");
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
// SecurityManager
shiroFilterFactoryBean.setSecurityManager(securityManager);
// Web "/login.jsp"
shiroFilterFactoryBean.setLoginUrl("/login_toLogin");
//
shiroFilterFactoryBean.setSuccessUrl("/usersPage");
// ;
shiroFilterFactoryBean.setUnauthorizedUrl("/403");
// .
Map<String,String> filterChainDefinitionMap = new LinkedHashMap<>();
// , Shiro
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");
//<!-- , , /** -->: , ;
//<!-- authc: url ; anon: url -->
filterChainDefinitionMap.put("/**", "authc");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return shiroFilterFactoryBean;
}
@Bean
public SecurityManager securityManager(){
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
// realm.
securityManager.setRealm(myShiroRealm());
// redis
//securityManager.setCacheManager(cacheManager());
// session redis
securityManager.setSessionManager(sessionManager());
return securityManager;
}
@Bean
public ShiroRealm myShiroRealm(){
ShiroRealm myShiroRealm = new ShiroRealm();
// myShiroRealm.setCredentialsMatcher(hashedCredentialsMatcher());
return myShiroRealm;
}
}
/**
* shiro aop .
* ; ;
* @param securityManager
* @return
*/
@Bean
public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager){
AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
return authorizationAttributeSourceAdvisor;
}
/**
* shiro redisManager
* shiro-redis
* @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
* shiro-redis
* @return
*/
public RedisCacheManager cacheManager(){
RedisCacheManager redisCacheManager = new RedisCacheManager();
redisCacheManager.setRedisManager(redisManager());
return redisCacheManager;
}
/**
* RedisSessionDAO shiro sessionDao redis
* shiro-redis
*/
@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;
}
}
締め括りをつける一日の間にプロジェクトをspringbootに変えて、各種の資料を調べて、この文章があなたの助けになることを望みます。私たちを応援してください。