新建一個maven spring boot專案中遇到的問題
阿新 • • 發佈:2019-01-30
package config; import com.alibaba.druid.pool.DruidDataSource; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.Resource; import org.springframework.core.io.support.ResourcePatternResolver; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.stereotype.Repository; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy;import javax.sql.DataSource; import java.io.IOException;import java.sql.SQLException;import java.util.ArrayList; import java.util.Arrays;import java.util.List; @Slf4j @Configuration @MapperScan(basePackages = { "dao",}, annotationClass = Repository.class, sqlSessionFactoryRef = SysUserAuthDaoConfig.SQL_SESSION_FACTORY_NAME)
public class SysUserAuthDaoConfig { public static final String SQL_SESSION_FACTORY_NAME = "opsSqlSessionFactory"; @Value("${ops.database.username}") private String username; @Value("${ops.database.password}") private String password; @Value("${ops.database.url}") private String url; @Value("classpath:mybatis.userinfo/*.xml") private String mapperLocation; private DruidDataSource dataSource; private DataSourceTransactionManager transactionManager; private SqlSessionFactory sqlSessionFactory; @Autowired private ResourcePatternResolver resourceResolver; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getMapperLocation() { return mapperLocation; } public void setMapperLocation(String mapperLocation) { this.mapperLocation = mapperLocation; } public String[] getMapperLocations() { String[] mapperLocations = new String[1]; mapperLocations[0] = getMapperLocation(); return mapperLocations; } @PostConstruct public void init() { try { log.info("Init datasource: url: {}", url); dataSource = new DruidDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl(url); dataSource.setUsername(username); dataSource.setPassword(password); dataSource.setTestWhileIdle(true); dataSource.setTestOnReturn(false); dataSource.init(); transactionManager = new DataSourceTransactionManager(); transactionManager.setDataSource(dataSource); log.info("Init done"); } catch (Throwable t) { log.error("Init error", t); } } @PreDestroy public void destroy() { try { log.info("Close {}", url); dataSource.close(); log.info("Close {} done", url); } catch (Throwable t) { log.error("Destroy error", t); } } @Bean(name = SQL_SESSION_FACTORY_NAME) public SqlSessionFactory sqlSessionFactoryBean() throws Exception { if (sqlSessionFactory == null) { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); org.apache.ibatis.session.Configuration config = new org.apache.ibatis.session.Configuration(); config.setMapUnderscoreToCamelCase(true); sqlSessionFactoryBean.setConfiguration(config); sqlSessionFactoryBean.setDataSource(dataSource); List<Resource> resources = new ArrayList<>(); if (this.getMapperLocations() != null) { for (String mapperLocation : this.getMapperLocations()) { try { Resource[] mappers = resourceResolver.getResources(mapperLocation); resources.addAll(Arrays.asList(mappers)); } catch (IOException e) { log.error("IOException", e); return null; } } } Resource[] arr = resources.toArray(new Resource[resources.size()]); sqlSessionFactoryBean.setMapperLocations(arr); sqlSessionFactory = sqlSessionFactoryBean.getObject(); } return sqlSessionFactory; } @Bean("sysUserAuthJdbcTemplate") public JdbcTemplate jdbcTemplate() { return new JdbcTemplate(this.dataSource); } @Bean("sysUserAuthDataSource") public DataSource getDatabase() throws SQLException { return dataSource; } @Bean("sysUserAuthTransactionManager") public DataSourceTransactionManager transactionManager() { return transactionManager; } }