1. 程式人生 > >Spring多資料來源資料的配置、自動載入配置

Spring多資料來源資料的配置、自動載入配置

1、配置類程式碼

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;
import java.sql.SQLException;
@Configuration
@EnableAutoConfiguration
public class DbsourceConfig {

@Value("${spring.datasource.driver-class-name}")
private String driverClassName;
@Value("${spring.datasource.initialSize}")
private int initialSize;
@Value("${spring.datasource.minIdle}")
private int minIdle;
@Value("${spring.datasource.maxActive}")
private int maxActive;
@Value("${spring.datasource.maxWait}")
private int maxWait;
@Value("${spring.datasource.timeBetweenEvictionRunsMillis}")
private int timeBetweenEvictionRunsMillis;
@Value("${spring.datasource.minEvictableIdleTimeMillis}")
private int minEvictableIdleTimeMillis;
@Value("${spring.datasource.validationQuery}")
private String validationQuery;
@Value("${spring.datasource.testWhileIdle}")
private boolean testWhileIdle;
@Value("${spring.datasource.testOnBorrow}")
private boolean testOnBorrow;
@Value("${spring.datasource.testOnReturn}")
private boolean testOnReturn;
@Value("${spring.datasource.poolPreparedStatements}")
private boolean poolPreparedStatements;
@Value("${spring.datasource.maxPoolPreparedStatementPerConnectionSize}")
private int maxPoolPreparedStatementPerConnectionSize;
@Value("${spring.datasource.filters}")
private String filters;
@Value("${spring.datasource.connectionProperties}")
private String connectionProperties;
@Value("${spring.datasource.useGlobalDataSourceStat}")
private boolean useGlobalDataSourceStat;


/*******************************資料來源1*******************/
@Value("${spring.datasource.url}")
private String dbUrl;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
/*******************************資料來源2*******************/
@Value("${spring.datasource.finance.url}")
private String financeDbUrl;
@Value("${spring.datasource.finance.username}")
private String financeUsername;
@Value("${spring.datasource.finance.password}")
private String financePassword;






@Bean(name = "usersdataSource")     //宣告其為Bean例項
                  //在同樣的DataSource中,首先使用被標註的DataSource
public DataSource dataSource(){
    DruidDataSource datasource = new DruidDataSource();
    datasource.setUrl(this.dbUrl);
    datasource.setUsername(username);
    datasource.setPassword(password);
    datasource.setDriverClassName(driverClassName);
    //configuration
    datasource.setInitialSize(initialSize);
    datasource.setMinIdle(minIdle);
    datasource.setMaxActive(maxActive);
    datasource.setMaxWait(maxWait);
    datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
    datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
    datasource.setValidationQuery(validationQuery);
    datasource.setTestWhileIdle(testWhileIdle);
    datasource.setTestOnBorrow(testOnBorrow);
    datasource.setTestOnReturn(testOnReturn);
    datasource.setPoolPreparedStatements(poolPreparedStatements);
    datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
    datasource.setUseGlobalDataSourceStat(useGlobalDataSourceStat);
    try {
        datasource.setFilters(filters);
    } catch (SQLException e) {
        System.err.println("druid configuration initialization filter: "+ e);
    }
    datasource.setConnectionProperties(connectionProperties);
    return datasource;
}


/**
 * mysql資料 jdbc連線
 * @return
 */
@Bean(name = "jdbcOperation")
public JdbcTemplate getGraphicDataDS(@Qualifier("usersdataSource") DataSource dataSource){
    return new JdbcTemplate(dataSource, true);

}







/****************************  資料來源2   *****************************/

@Bean(name = "financeDataSource")     //宣告其為Bean例項
public DataSource financeDataSource(){
    DruidDataSource datasource = new DruidDataSource();
    datasource.setUrl(this.financeDbUrl);
    datasource.setUsername(this.financeUsername);
    datasource.setPassword(this.financePassword);
    datasource.setDriverClassName(driverClassName);
    datasource.setInitialSize(initialSize);
    datasource.setMinIdle(minIdle);
    datasource.setMaxActive(maxActive);
    datasource.setMaxWait(maxWait);
    datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
    datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
    datasource.setValidationQuery(validationQuery);
    datasource.setTestWhileIdle(testWhileIdle);
    datasource.setTestOnBorrow(testOnBorrow);
    datasource.setTestOnReturn(testOnReturn);
    datasource.setPoolPreparedStatements(poolPreparedStatements);
    datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
    datasource.setUseGlobalDataSourceStat(useGlobalDataSourceStat);
    try {
        datasource.setFilters(filters);
    } catch (SQLException e) {
        System.err.println("druid configuration initialization filter: "+ e);
    }
    datasource.setConnectionProperties(connectionProperties);
    return datasource;
}

@Bean(name = "financejdbc")
public JdbcTemplate getFinanceDS(@Qualifier("financeDataSource") DataSource dataSource) {
    return new JdbcTemplate(dataSource,true);
}


/**
 * 業務hana源
 * 原來是從資料庫中讀取的配置現在把他抽取出來,
 * 因為基本業務型別確定後基本不會改變而且這種方式構造連線池不方便也沒有必要
 *
 * @return
 */
@Bean(name = "serviceHanaDataSource")
@Qualifier("serviceHanaDataSource")
@ConfigurationProperties(prefix = "service.hana.datasource")
public DataSource getServiceHanaDataSource() {
    return DataSourceBuilder.create().build();
}

@Bean(name = "serviceHanaJdbcTemplate")
public JdbcTemplate getServiceHanaJdbcTemplate(@Qualifier("serviceHanaDataSource") DataSource dataSource) {
    return new JdbcTemplate(dataSource);
}

}

使用時直接
@Resource
private JdbcTemplate financejdbc;
@Autowired
private JdbcTemplate jdbcOperation;

相關推薦

Spring資料來源資料配置自動載入配置

1、配置類程式碼 import com.alibaba.druid.pool.DruidDataSource; import org.springframework.beans.factory.annotation.Qualifier; import or

Spring Boot配置資料來源並實現Druid自動切換

SpringBoot多資料來源切換,先上配置檔案: 1.pom: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"

PHP設計模式:類自動載入PSR-0規範鏈式操作11種面向物件設計模式實現和使用OOP的基本原則和自動載入配置

一、類自動載入      SPL函式 (standard php librarys)      類自動載入,儘管 __autoload() 函式也能自動載入類和介面,但更建議使用&nbs

spring資料來源配置 簡單明瞭

來源地址https://blog.csdn.net/ll535299/article/details/78203634   1.首先在config.properties檔案中配置兩個資料庫連線的基本資料。這個省略了  2.在spring配置檔案中配置這兩個資料來源:&nb

Spring Boot核心-核心註解自動配置自定義banner

Spring Boot的核心 入口類和@SpringBootApplication Spring Boot的專案一般都會有*Application的入口類,入口類中會有main方法,這是一個標準的Java應用程式的入口方法。 @SpringBootAppl

spring資料來源配置+aop註解方式屬性注入

本文將介紹spring中多個數據源的配置,同時使用註解的方式切換選擇資料來源。 spring的其他配置不再細說,只說資料來源的相關配置。 參考多篇博文實踐整理,不在一一查找出處,如有侵權請及時聯絡 ==================================== 1

Springmvc+mybatis+spring資料來源配置 AOP+註解方式切換資料來源

紙上得來終覺淺,絕知此事要躬行 最終效果就是,通過在service層類或方法上,註解宣告需要的資料來源名稱,從而實現切換資料來源的目的 理論知識就不說了,直接上程式碼(不支援分散式事務)* 1.準備多資料來源properties檔案 <!-- 資料

Spring 資料來源事務配置問題

在SpringSide 3 中,白衣提供的預先配置好的環境非常有利於使用者進行快速開發,但是同時也會為擴充套件帶來一些困難。最直接的例子就是關於在專案中使用多個數據源的問題,似乎 很難搞。在上一篇中,我探討了SpringSide 3 中的資料訪問層,在這一篇中,我立志要解決多

spring資料來源配置(分散式事務管理)

<bean id="dataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close"> <property name="uniqueResource

spring 資料來源手動管理事務,最大程度保障資料一致性

模板程式碼如下: @Autowired private DataSourceTransactionManager transactionManager; public void

spring資料來源配置

一、問題提出 專案中我們經常會遇到多資料來源的問題,尤其是資料同步或定時任務等專案更是如此。多資料來源讓人最頭痛的,不是配置多個數據源,而是如何能靈活動態的切換資料來源。例如在一個spring和hibernate的框架的專案中,我們在spring配置中往往是配置一個data

SpringBoot(三)通過properties實現個數據庫環境自動切換配置

方式 info 本地 所有 -c int 安裝 style 過多 前面的文章已經介紹了CentOS部署SpringBoot項目從0到1的詳細過程,包括Linux安裝ftp、Tomcat以及Java jdk的全部過程。這篇文章主要介紹關於springboot如何通過多

資料(十八):Hive元資料配置常見屬性配置資料型別與資料轉換

一、Hive元資料配置到MySQL當中         為什麼要把Hive的元資料配置到MySql中?我們可以使用多個客戶端連線linux系統並且都嘗試啟動Hive,可以發現在啟動第二個Hive客戶端的時候發生報錯了。   

renren-fast 框架資料來源資料

在常量配置 io.renren.datasources. DataSourceNames 新增 資料來源 標誌 String '''''FIRST''''' = "first"; String '''''SECOND''''' = "second";

《Log4j2官方文件》自動載入配置

Log4j可以在初始化的時候執行自動配置。當Log4j啟動的時候,會首先定位所有的ConfigurationFactory的配置然後會根據權重進行從高到低的排序。目前的版本,Log4j包含了四種類型的ConfigurationFactory的實現,JSON,YAML,properties,XM

IK Analysis for Elasticsearch 文件 —— 安裝 詞典配置載入

IK Analysis for Elasticsearch The IK Analysis plugin integrates Lucene IK analyzer (http://code.google.com/p/ik-analyzer/) into elasticsearch, suppo

spring資料來源+事物管理(資料來源切換時間需要在事物起作用之前)

1、使用了spring的aop思想,實現了動態資料來源的切換。 2、spring的事務管理,是基於資料來源的,所以如果要實現動態資料來源切換,而且在同一個資料來源中保證事務是起作用的話,就需要注意二者的順序問題,即:在事物起作用之前就要把資料來源切換回來。    

2.spring boot熱啟動,autowired自動載入,value註解,屬性注入

<dependency> <groupId>org.springframework.boot</groupId> <artifactId&

Spring 資料來源 @Transactional 註解事務管理

在 Spring,MyBatis 下兩個資料來源,通過 @Transactional 註解 配置簡單的事務管理 spring-mybatis.xml <!--******************************** data one start *********

優雅地為RecyclerView加上頭部下拉重新整理自動載入

一、概述 我們在寫專案的時候,永遠都離不開ListView、RecyclerView這類的控制元件,幾乎是在任何的APP中都可以看到他們的影子,但是RecyclerView並沒有像ListView提供了addHeadView、addFooterView