前言:如果你一點spring的基礎沒有,建議你不要學習springboot,至少先有一個spring的項目經驗或者自己搭建過spring的項目再學習springboot,這樣你會發現在spring中搞不懂的,在springboot中得到一些答案。springboot的原則是“約定大於配置”,所以在使用springboot的時候如果出現問題,沒有一點基礎,解決問題就很困難。
目標:將spring的容器中的配置:數據庫的配置,定時器的配置轉換到springboot中,實現spring與springbooot的配置對接。
數據庫的配置轉換:
spring中數據庫連接的配置如下
<!--數據庫實例--> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.mybatis.driver}" /> <property name="url" value="${jdbc.mybatis.url}" /> <property name="username" value="${jdbc.mybatis.username}" /> <property name="password" value="${jdbc.mybatis.password}" /> <!-- 初始化連接大小 --> <property name="initialSize" value="10" /> <!-- 連接池最大數量 --> <property name="maxActive" value="1000" /> <!-- 連接池最大空閑 --> <property name="maxIdle" value="30" /> <!-- 連接池最小空閑 --> <property name="minIdle" value="10" /> <!-- 獲取連接最大等待時間 --> <property name="maxWait" value="2000" /> </bean>
pringboot中的配置
@Bean(name = "dataSource")
public BasicDataSource myGetDataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setUrl(url);
dataSource.setPassword(passWord);
dataSource.setUsername(userName);
dataSource.setMaxIdle(2);
dataSource.setMaxActive(20);
dataSource.setMaxWait(1000);
dataSource.setInitialSize(2);
//
dataSource.setValidationQuery("SELECT 1");
dataSource.setRemoveAbandoned(true);
dataSource.setTestWhileIdle(true);
dataSource.setTimeBetweenEvictionRunsMillis(30000);
dataSource.setNumTestsPerEvictionRun(30);
dataSource.setMinEvictableIdleTimeMillis(1800000);
return dataSource;
}
spring 中的配置
<!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:springMVCmybatis/com/my/mapper/*.xml" />
<!-- <property name="typeAliasesPackage" value="com.my.model"/> -->
</bean>
springboot配置sqlSessionFactoryBean,對應上面的sping的SqlSessionFactoryBean類
。
@Bean(name = "sqlSessionFactoryBean")
public SqlSessionFactoryBean myGetSqlSessionFactory(DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
// mapperLocations
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
try {
sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:mapper/*Mapper.xml"));
} catch (IOException e) {
log.info("sqlSessionFactoryBean的setMapperLocations有問題");
e.printStackTrace();
}
// dataSource
sqlSessionFactoryBean.setDataSource(dataSource);
// SqlSessionFactory sessionFactory = sqlSessionFactoryBean.getObject();
return sqlSessionFactoryBean;
}
spring中的配置
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="springMVCmybatis" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
springboot中的配置
package com.my.myconfigure; import org.mybatis.spring.mapper.MapperScannerConfigurer; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.context.annotation.Configuration; //<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> //<property name="basePackage" value="springMVCmybatis" /> //<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> // //</bean> @Configuration
// 這個注釋是需要在加載MybatisDbConfigure.class之后再加載MapperScanConfig這個類 @AutoConfigureAfter(MybatisDbConfigure.class) public class MapperScanConfig { public MapperScannerConfigurer myGetMapperScannerConfigurer() { MapperScannerConfigurer myMapperScannerConfigurer = new MapperScannerConfigurer(); myMapperScannerConfigurer.setBasePackage("com.my.dao"); myMapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactoryBean"); return myMapperScannerConfigurer; } }
結論:springboot是通過@Configuration來標注自定義配置,配置中使用@Bean來添加類作用與spring配置中的.xml文件作用一樣,兩者都是容器的作用。
關於這部分配置已經上傳到我的github上,感興趣或者不懂得,可以登錄查看。
