Spring boot configures multiple data sources

Configure the first datasource (Primary)

 

/**
 * Druid data source configuration
 */
@Configuration
@MapperScan(basePackages = DataSourceConfig.PACKAGE, sqlSessionFactoryRef = "sessionFactory",sqlSessionTemplateRef = "sqlSessionTemplate")
public class DataSourceConfig {
    static final String PACKAGE = "com.a.b.test1";
    private static final Logger LOGGER = LoggerFactory.getLogger(DataSourceConfig.class);
    private static String dbUrl;

    private static String username;

    private static String password;

    private static String driverClassName;

    private static int initialSize;

    private static int minIdle;

    private static int maxActive;

    private static int maxWait;

    /**
     * Register DruidServlet
     *
     * @return
     */
    @Bean
    public ServletRegistrationBean druidServletRegistrationBean() {
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
        servletRegistrationBean.setServlet(new StatViewServlet());
        servletRegistrationBean.addUrlMappings("/druid/*");
        return servletRegistrationBean;
    }

    /**
     * Register DruidFilter interception
     *
     * @return
     */
    @Bean
    public FilterRegistrationBean druidFilterRegistrationBean() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new WebStatFilter());
        Map<String, String> initParams = new HashMap<String, String>();
        //Set ignore request
        initParams.put("exclusions", "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*");
        filterRegistrationBean.setInitParameters(initParams);
        filterRegistrationBean.addUrlPatterns("/*");
        return filterRegistrationBean;
    }

    /**
     * Configure DataSource
     * @return
     * @throws SQLException
     */
    @Bean(initMethod = "init",destroyMethod = "close")
    @Primary
    public DataSource dataSource() throws SQLException {
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setUsername(username);
        druidDataSource.setPassword(password);
        druidDataSource.setUrl(dbUrl);
        druidDataSource.setFilters("stat,wall");
        druidDataSource.setInitialSize(initialSize);
        druidDataSource.setMinIdle(minIdle);
        druidDataSource.setMaxActive(maxActive);
        druidDataSource.setMaxWait(maxWait);
        druidDataSource.setUseGlobalDataSourceStat(true);
        druidDataSource.setDriverClassName(driverClassName);
        return druidDataSource;
    }

    @Bean(name = "transactionManager")
    @Primary
    public DataSourceTransactionManager transactionManager(@Qualifier("dataSource") DataSource dataSource) throws SQLException {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "sessionFactory")
    @Primary
    public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setTypeAliasesPackage("com.xxx.domain");
        //Add mybatis configuration file
        PathMatchingResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();
//        bean.setConfigLocation(resourceResolver.getResource("classpath:mybatis/config/mybatis-config.xml"));
        try {
            bean.setMapperLocations(resourceResolver.getResources("classpath:mybatis/mapper/*.xml"));
            return bean.getObject();
        } catch (IOException e) {
            LOGGER.error("An exception occurred when obtaining mapper resources",e);
            throw new RuntimeException("An exception occurred in obtaining mapper resources",e);
        } catch (Exception e){
            LOGGER.error("Exception occurred while initializing sqlSessionFactory",e);
            throw new RuntimeException("Exception occurred while initializing sqlSessionFactory",e);
        }
    }

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

    @Value("${spring.datasource.url}")
    public void setDbUrl(String dbUrl) {
        DataSourceConfig.dbUrl = dbUrl;
    }

    @Value("${spring.datasource.username}")
    public void setUsername(String username) {
        DataSourceConfig.username = username;
    }

    @Value("${spring.datasource.password}")
    public void setPassword(String password) {
        DataSourceConfig.password = password;
    }

    @Value("${spring.datasource.driver-class-name}")
    public void setDriverClassName(String driverClassName) {
        DataSourceConfig.driverClassName = driverClassName;
    }

    @Value(value = "${spring.datasource.initialSize}")
    public void setInitialSize(int initialSize) {
        DataSourceConfig.initialSize = initialSize;
    }

    @Value(value = "${spring.datasource.minIdle}")
    public void setMinIdle(int minIdle) {
        DataSourceConfig.minIdle = minIdle;
    }

    @Value(value = "${spring.datasource.maxActive}")
    public void setMaxActive(int maxActive) {
        DataSourceConfig.maxActive = maxActive;
    }

    @Value(value = "${spring.datasource.maxWait}")
    public void setMaxWait(int maxWait) {
        DataSourceConfig.maxWait = maxWait;
    }
}

 Configure the second datasource

@Configuration
@MapperScan(basePackages = NewWindowsDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "nwSessionFactory",sqlSessionTemplateRef = "nwSqlSessionTemplate")
public class NewWindowsDataSourceConfig {
    static final String PACKAGE = "com.abtest2"; //Mybatis is used in this project, and this path is the package structure of the scanned mapper
    private static final Logger LOGGER = LoggerFactory.getLogger (NewWindowsDataSourceConfig.class);
    private static String dbUrl;

    private static String username;

    private static String password;

    private static String driverClassName;

    private static int initialSize;

    private static int minIdle;

    private static int maxActive;

    private static int maxWait;

    /**
     * Register DruidFilter interception
     *
     * @return
     */
    @Bean
    public FilterRegistrationBean nwFilterRegistrationBean() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new WebStatFilter());
        Map<String, String> initParams = new HashMap<String, String>();
        //Set ignore request
        initParams.put("exclusions", "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*");
        filterRegistrationBean.setInitParameters(initParams);
        filterRegistrationBean.addUrlPatterns("/*");
        return filterRegistrationBean;
    }

    /**
     * Configure DataSource
     * @return
     * @throws SQLException
     */
    @Bean(initMethod = "init",destroyMethod = "close")
    public DataSource nwDataSource() throws SQLException {
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setUsername(username);
        druidDataSource.setPassword(password);
        druidDataSource.setUrl(dbUrl);
        druidDataSource.setFilters("stat,wall");
        druidDataSource.setInitialSize(initialSize);
        druidDataSource.setMinIdle(minIdle);
        druidDataSource.setMaxActive(maxActive);
        druidDataSource.setMaxWait(maxWait);
        druidDataSource.setUseGlobalDataSourceStat(true);
        druidDataSource.setDriverClassName(driverClassName);
        return druidDataSource;
    }

    @Bean(name = "nwTransactionManager")
    public DataSourceTransactionManager nwTransactionManager(@Qualifier("nwDataSource") DataSource nwDataSource) throws SQLException {
        return new DataSourceTransactionManager(nwDataSource());
    }

    @Bean(name = "nwSessionFactory")
    public SqlSessionFactory nwSqlSessionFactory(@Qualifier("nwDataSource") DataSource nwDataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(nwDataSource);
        bean.setTypeAliasesPackage("com.xxx.domain");
        //Add mybatis configuration file
        PathMatchingResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();
        bean.setConfigLocation(resourceResolver.getResource("classpath:mybatis/config/mybatis-config.xml"));
        try {
            bean.setMapperLocations(resourceResolver.getResources("classpath:mybatis/mapper/*.xml"));
            return bean.getObject();
        } catch (IOException e) {
            LOGGER.error("An exception occurred when obtaining mapper resources",e);
            throw new RuntimeException("An exception occurred in obtaining mapper resources",e);
        } catch (Exception e){
            LOGGER.error("Exception occurred while initializing sqlSessionFactory",e);
            throw new RuntimeException("Exception occurred while initializing sqlSessionFactory",e);
        }
    }

    @Bean(name = "nwSqlSessionTemplate")
    public SqlSessionTemplate nwSqlSessionTemplate(@Qualifier("nwSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

    @Value("${nw.datasource.url}")
    public void setDbUrl(String dbUrl) {
        NewWindowsDataSourceConfig.dbUrl = dbUrl;
    }

    @Value("${nw.datasource.username}")
    public void setUsername(String username) {
        NewWindowsDataSourceConfig.username = username;
    }

    @Value("${nw.datasource.password}")
    public void setPassword(String password) {
        NewWindowsDataSourceConfig.password = password;
    }

    @Value("${spring.datasource.driver-class-name}")
    public void setDriverClassName(String driverClassName) {
        NewWindowsDataSourceConfig.driverClassName = driverClassName;
    }

    @Value(value = "${spring.datasource.initialSize}")
    public void setInitialSize(int initialSize) {
        NewWindowsDataSourceConfig.initialSize = initialSize;
    }

    @Value(value = "${spring.datasource.minIdle}")
    public void setMinIdle(int minIdle) {
        NewWindowsDataSourceConfig.minIdle = minIdle;
    }

    @Value(value = "${spring.datasource.maxActive}")
    public void setMaxActive(int maxActive) {
        NewWindowsDataSourceConfig.maxActive = maxActive;
    }

    @Value(value = "${nw.datasource.maxWait}")
    public void setMaxWait(int maxWait) {
        NewWindowsDataSourceConfig.maxWait = maxWait;
    }
}

 Note that @MapperScan's basePackages configuration package paths cannot overlap and must be distinguished, otherwise the Mybatis configuration corresponding to one of the datasources will not be loaded into the Mapper interface.

 DruidServlet configure one on the line

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326210088&siteId=291194637