1. 程式人生 > >新建一個maven spring boot專案中遇到的問題

新建一個maven spring boot專案中遇到的問題

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;    }

}