MainSourceConfiguration.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443
  1. package io.github.pnoker.gateway.config;
  2. import com.zaxxer.hikari.HikariConfig;
  3. import com.zaxxer.hikari.HikariDataSource;
  4. import io.github.pnoker.gateway.dbdao.DBMgrProxy;
  5. import org.apache.ibatis.session.SqlSessionFactory;
  6. import org.mybatis.spring.SqlSessionFactoryBean;
  7. import org.mybatis.spring.SqlSessionTemplate;
  8. import org.mybatis.spring.annotation.MapperScan;
  9. import org.springframework.beans.factory.annotation.Qualifier;
  10. import org.springframework.beans.factory.annotation.Value;
  11. import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
  12. import org.springframework.boot.jdbc.DataSourceBuilder;
  13. import org.springframework.context.annotation.Bean;
  14. import org.springframework.context.annotation.Configuration;
  15. import org.springframework.context.annotation.PropertySource;
  16. import org.springframework.jdbc.datasource.DataSourceTransactionManager;
  17. import javax.annotation.PostConstruct;
  18. import javax.sql.DataSource;
  19. @Configuration
  20. @MapperScan(basePackages = {"io.github.pnoker.gateway.dbdao.mapper",
  21. "io.github.pnoker.gateway.dbdao.tangyinSource.mapper"}, sqlSessionTemplateRef = "mainSqlSessionTemplate")
  22. public class MainSourceConfiguration {
  23. @Value("${spring.datasource.driver-class-name:}")
  24. private String driveClass = "org.postgresql.Driver";
  25. @Value("${spring.datasource.jdbc-url:}")
  26. private String url = "";
  27. @Value("${spring.datasource.username:}")
  28. private String username = "";
  29. @Value("${spring.datasource.password:}")
  30. private String password = "";
  31. @Value("${spring.datasource.data.maximum-pool-size:200}")
  32. private Integer maxPoolSize;
  33. @Value("${spring.datasource.data.minimum-idle:1}")
  34. private Integer minIdle;
  35. @Value("${spring.datasource.data.connection-test-query:}")
  36. private String connectionTestQuery;
  37. @Value("${spring.datasource.data.max-lifetime:120000}")
  38. private Long maxLifetime;
  39. @Value("${spring.datasource.data.idle-timeout:30000}")
  40. private Long idleTimeout;
  41. @Value("${spring.datasource.data.connection-timeout:30000}")
  42. private Long connectionTimeout;
  43. @Value("${spring.datasource.data.validation-timeout:30000}")
  44. private Long validTimeout;
  45. @Bean(name = "mainDatasource")
  46. //@ConfigurationProperties(prefix = "spring.datasource.data")
  47. public DataSource mainDataSource() {
  48. return new HikariDataSource(getConfig());
  49. //return DataSourceBuilder.create().build();
  50. //Spring Boot 2.x默认使用HikariCP
  51. }
  52. private HikariConfig getConfig() {
  53. HikariConfig hikariConfig = new HikariConfig();
  54. hikariConfig.setDriverClassName(driveClass);
  55. hikariConfig.setJdbcUrl(url);
  56. hikariConfig.setUsername(username);
  57. hikariConfig.setPassword(password);
  58. hikariConfig.setMaximumPoolSize(maxPoolSize);
  59. hikariConfig.setMinimumIdle(minIdle);
  60. hikariConfig.setConnectionTestQuery(connectionTestQuery);
  61. hikariConfig.setMaxLifetime(maxLifetime);
  62. hikariConfig.setIdleTimeout(idleTimeout);
  63. hikariConfig.setConnectionTimeout(connectionTimeout);
  64. hikariConfig.setValidationTimeout(validTimeout);
  65. return hikariConfig;
  66. }
  67. @Bean("mainSqlSessionFactory")
  68. public SqlSessionFactory mainSqlSessionFactoryBean(@Qualifier("mainDatasource") DataSource dataSource) throws Exception {
  69. SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
  70. sessionFactoryBean.setDataSource(dataSource);
  71. org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
  72. configuration.setCallSettersOnNulls(true); //数据库中字段值为null时也要求返回
  73. configuration.setMapUnderscoreToCamelCase(true); //开启驼峰映射
  74. configuration.setCacheEnabled(false);
  75. sessionFactoryBean.setConfiguration(configuration);
  76. return sessionFactoryBean.getObject();
  77. }
  78. @Bean("mainSqlSessionTemplate")
  79. public SqlSessionTemplate mainSqlSessionTemplate(@Qualifier("mainSqlSessionFactory") SqlSessionFactory sessionFactory) {
  80. return new SqlSessionTemplate(sessionFactory);
  81. }
  82. @Bean(name = "mainDbTransactionManager")
  83. public DataSourceTransactionManager mainDbTransactionManager(@Qualifier("mainDatasource") DataSource dataSource){
  84. return new DataSourceTransactionManager(dataSource);
  85. }
  86. @PostConstruct
  87. public void init(){
  88. GlobalData.getInstance().setPostGisValid("org.postgis.DriverWrapper".equals(driveClass));
  89. }
  90. //TODO child数据源
  91. @Value("${spring.datasource.childpg.driver-class-name:}")
  92. private String driveClass1 = "org.postgresql.Driver";
  93. @Value("${spring.datasource.childpg.jdbc-url:}")
  94. private String url1 = "";
  95. @Value("${spring.datasource.childpg.username:}")
  96. private String username1 = "";
  97. @Value("${spring.datasource.childpg.password:}")
  98. private String password1 = "";
  99. @Value("${spring.datasource.data.maximum-pool-size:200}")
  100. private Integer maxPoolSize1;
  101. @Value("${spring.datasource.data.minimum-idle:1}")
  102. private Integer minIdle1;
  103. @Value("${spring.datasource.data.connection-test-query:}")
  104. private String connectionTestQuery1;
  105. @Value("${spring.datasource.data.max-lifetime:120000}")
  106. private Long maxLifetime1;
  107. @Value("${spring.datasource.data.idle-timeout:30000}")
  108. private Long idleTimeout1;
  109. @Value("${spring.datasource.data.connection-timeout:30000}")
  110. private Long connectionTimeout1;
  111. @Value("${spring.datasource.data.validation-timeout:30000}")
  112. private Long validTimeout1;
  113. @Bean(name = "childDatasource")
  114. //@ConfigurationProperties(prefix = "spring.datasource.data")
  115. public DataSource childDatasource() {
  116. // return new HikariDataSource(getConfig1());
  117. return DataSourceBuilder.create().build();
  118. //Spring Boot 2.x默认使用HikariCP
  119. }
  120. private HikariConfig getConfig1() {
  121. HikariConfig hikariConfig = new HikariConfig();
  122. hikariConfig.setDriverClassName(driveClass1);
  123. hikariConfig.setJdbcUrl(url1);
  124. hikariConfig.setUsername(username1);
  125. hikariConfig.setPassword(password1);
  126. hikariConfig.setMaximumPoolSize(maxPoolSize1);
  127. hikariConfig.setMinimumIdle(minIdle1);
  128. hikariConfig.setConnectionTestQuery(connectionTestQuery1);
  129. hikariConfig.setMaxLifetime(maxLifetime1);
  130. hikariConfig.setIdleTimeout(idleTimeout1);
  131. hikariConfig.setConnectionTimeout(connectionTimeout1);
  132. hikariConfig.setValidationTimeout(validTimeout1);
  133. return hikariConfig;
  134. }
  135. @Bean("childSqlSessionFactory")
  136. public SqlSessionFactory childSqlSessionFactoryBean(@Qualifier("childDatasource") DataSource dataSource) throws Exception {
  137. SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
  138. sessionFactoryBean.setDataSource(dataSource);
  139. org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
  140. configuration.setCallSettersOnNulls(true); //数据库中字段值为null时也要求返回
  141. configuration.setMapUnderscoreToCamelCase(true); //开启驼峰映射
  142. configuration.setCacheEnabled(false);
  143. sessionFactoryBean.setConfiguration(configuration);
  144. return sessionFactoryBean.getObject();
  145. }
  146. @Bean("childSqlSessionTemplate")
  147. public SqlSessionTemplate childSqlSessionTemplate(@Qualifier("childSqlSessionFactory") SqlSessionFactory sessionFactory) {
  148. return new SqlSessionTemplate(sessionFactory);
  149. }
  150. @Bean(name = "childDbTransactionManager")
  151. public DataSourceTransactionManager childDbTransactionManager(@Qualifier("childDatasource") DataSource dataSource){
  152. return new DataSourceTransactionManager(dataSource);
  153. }
  154. //TODO child2数据源
  155. @Value("${spring.datasource.child2pg.driver-class-name:}")
  156. private String driveClass2 = "org.postgresql.Driver";
  157. @Value("${spring.datasource.child2pg.jdbc-url:}")
  158. private String url2 = "";
  159. @Value("${spring.datasource.child2pg.username:}")
  160. private String username2 = "";
  161. @Value("${spring.datasource.child2pg.password:}")
  162. private String password2 = "";
  163. @Value("${spring.datasource.data.maximum-pool-size:200}")
  164. private Integer maxPoolSize2;
  165. @Value("${spring.datasource.data.minimum-idle:1}")
  166. private Integer minIdle2;
  167. @Value("${spring.datasource.data.connection-test-query:}")
  168. private String connectionTestQuery2;
  169. @Value("${spring.datasource.data.max-lifetime:120000}")
  170. private Long maxLifetime2;
  171. @Value("${spring.datasource.data.idle-timeout:30000}")
  172. private Long idleTimeout2;
  173. @Value("${spring.datasource.data.connection-timeout:30000}")
  174. private Long connectionTimeout2;
  175. @Value("${spring.datasource.data.validation-timeout:30000}")
  176. private Long validTimeout2;
  177. @Bean(name = "child2Datasource")
  178. //@ConfigurationProperties(prefix = "spring.datasource.data")
  179. public DataSource child2Datasource() {
  180. return new HikariDataSource(getConfig2());
  181. // return DataSourceBuilder.create().build();
  182. //Spring Boot 2.x默认使用HikariCP
  183. }
  184. private HikariConfig getConfig2() {
  185. HikariConfig hikariConfig = new HikariConfig();
  186. hikariConfig.setDriverClassName(driveClass2);
  187. hikariConfig.setJdbcUrl(url2);
  188. hikariConfig.setUsername(username2);
  189. hikariConfig.setPassword(password2);
  190. hikariConfig.setMaximumPoolSize(maxPoolSize2);
  191. hikariConfig.setMinimumIdle(minIdle2);
  192. hikariConfig.setConnectionTestQuery(connectionTestQuery2);
  193. hikariConfig.setMaxLifetime(maxLifetime2);
  194. hikariConfig.setIdleTimeout(idleTimeout2);
  195. hikariConfig.setConnectionTimeout(connectionTimeout2);
  196. hikariConfig.setValidationTimeout(validTimeout2);
  197. return hikariConfig;
  198. }
  199. @Bean("child2SqlSessionFactory")
  200. public SqlSessionFactory child2SqlSessionFactoryBean(@Qualifier("child2Datasource") DataSource dataSource) throws Exception {
  201. SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
  202. sessionFactoryBean.setDataSource(dataSource);
  203. org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
  204. configuration.setCallSettersOnNulls(true); //数据库中字段值为null时也要求返回
  205. configuration.setMapUnderscoreToCamelCase(true); //开启驼峰映射
  206. configuration.setCacheEnabled(false);
  207. sessionFactoryBean.setConfiguration(configuration);
  208. return sessionFactoryBean.getObject();
  209. }
  210. @Bean("child2SqlSessionTemplate")
  211. public SqlSessionTemplate child2SqlSessionTemplate(@Qualifier("child2SqlSessionFactory") SqlSessionFactory sessionFactory) {
  212. return new SqlSessionTemplate(sessionFactory);
  213. }
  214. @Bean(name = "child2DbTransactionManager")
  215. public DataSourceTransactionManager child2DbTransactionManager(@Qualifier("child2Datasource") DataSource dataSource){
  216. return new DataSourceTransactionManager(dataSource);
  217. }
  218. //TODO child3数据源
  219. @Value("${spring.datasource.child3pg.driver-class-name:}")
  220. private String driveClass3 = "org.postgresql.Driver";
  221. @Value("${spring.datasource.child3pg.jdbc-url:}")
  222. private String url3 = "";
  223. @Value("${spring.datasource.child3pg.username:}")
  224. private String username3 = "";
  225. @Value("${spring.datasource.child3pg.password:}")
  226. private String password3 = "";
  227. @Value("${spring.datasource.data.maximum-pool-size:200}")
  228. private Integer maxPoolSize3;
  229. @Value("${spring.datasource.data.minimum-idle:1}")
  230. private Integer minIdle3;
  231. @Value("${spring.datasource.data.connection-test-query:}")
  232. private String connectionTestQuery3;
  233. @Value("${spring.datasource.data.max-lifetime:120000}")
  234. private Long maxLifetime3;
  235. @Value("${spring.datasource.data.idle-timeout:30000}")
  236. private Long idleTimeout3;
  237. @Value("${spring.datasource.data.connection-timeout:30000}")
  238. private Long connectionTimeout3;
  239. @Value("${spring.datasource.data.validation-timeout:30000}")
  240. private Long validTimeout3;
  241. @Bean(name = "child3Datasource")
  242. //@ConfigurationProperties(prefix = "spring.datasource.data")
  243. public DataSource child3Datasource() {
  244. return new HikariDataSource(getConfig3());
  245. // return DataSourceBuilder.create().build();
  246. //Spring Boot 2.x默认使用HikariCP
  247. }
  248. private HikariConfig getConfig3() {
  249. HikariConfig hikariConfig = new HikariConfig();
  250. hikariConfig.setDriverClassName(driveClass3);
  251. hikariConfig.setJdbcUrl(url3);
  252. hikariConfig.setUsername(username3);
  253. hikariConfig.setPassword(password3);
  254. hikariConfig.setMaximumPoolSize(maxPoolSize3);
  255. hikariConfig.setMinimumIdle(minIdle3);
  256. hikariConfig.setConnectionTestQuery(connectionTestQuery3);
  257. hikariConfig.setMaxLifetime(maxLifetime3);
  258. hikariConfig.setIdleTimeout(idleTimeout3);
  259. hikariConfig.setConnectionTimeout(connectionTimeout3);
  260. hikariConfig.setValidationTimeout(validTimeout3);
  261. return hikariConfig;
  262. }
  263. @Bean("child3SqlSessionFactory")
  264. public SqlSessionFactory child3SqlSessionFactoryBean(@Qualifier("child3Datasource") DataSource dataSource) throws Exception {
  265. SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
  266. sessionFactoryBean.setDataSource(dataSource);
  267. org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
  268. configuration.setCallSettersOnNulls(true); //数据库中字段值为null时也要求返回
  269. configuration.setMapUnderscoreToCamelCase(true); //开启驼峰映射
  270. configuration.setCacheEnabled(false);
  271. sessionFactoryBean.setConfiguration(configuration);
  272. return sessionFactoryBean.getObject();
  273. }
  274. @Bean("child3SqlSessionTemplate")
  275. public SqlSessionTemplate child3SqlSessionTemplate(@Qualifier("child3SqlSessionFactory") SqlSessionFactory sessionFactory) {
  276. return new SqlSessionTemplate(sessionFactory);
  277. }
  278. @Bean(name = "child3DbTransactionManager")
  279. public DataSourceTransactionManager child3DbTransactionManager(@Qualifier("child3Datasource") DataSource dataSource){
  280. return new DataSourceTransactionManager(dataSource);
  281. }
  282. //TODO child4数据源
  283. @Value("${spring.datasource.child4pg.driver-class-name:}")
  284. private String driveClass4 = "org.postgresql.Driver";
  285. @Value("${spring.datasource.child4pg.jdbc-url:}")
  286. private String url4 = "";
  287. @Value("${spring.datasource.child4pg.username:}")
  288. private String username4 = "";
  289. @Value("${spring.datasource.child4pg.password:}")
  290. private String password4 = "";
  291. @Value("${spring.datasource.data.maximum-pool-size:200}")
  292. private Integer maxPoolSize4;
  293. @Value("${spring.datasource.data.minimum-idle:1}")
  294. private Integer minIdle4;
  295. @Value("${spring.datasource.data.connection-test-query:}")
  296. private String connectionTestQuery4;
  297. @Value("${spring.datasource.data.max-lifetime:120000}")
  298. private Long maxLifetime4;
  299. @Value("${spring.datasource.data.idle-timeout:30000}")
  300. private Long idleTimeout4;
  301. @Value("${spring.datasource.data.connection-timeout:30000}")
  302. private Long connectionTimeout4;
  303. @Value("${spring.datasource.data.validation-timeout:30000}")
  304. private Long validTimeout4;
  305. @Bean(name = "child4Datasource")
  306. //@ConfigurationProperties(prefix = "spring.datasource.data")
  307. public DataSource child4Datasource() {
  308. // return new HikariDataSource(getConfig4());
  309. return DataSourceBuilder.create().build();
  310. //Spring Boot 2.x默认使用HikariCP
  311. }
  312. private HikariConfig getConfig4() {
  313. HikariConfig hikariConfig = new HikariConfig();
  314. hikariConfig.setDriverClassName(driveClass4);
  315. hikariConfig.setJdbcUrl(url4);
  316. hikariConfig.setUsername(username4);
  317. hikariConfig.setPassword(password4);
  318. hikariConfig.setMaximumPoolSize(maxPoolSize4);
  319. hikariConfig.setMinimumIdle(minIdle4);
  320. hikariConfig.setConnectionTestQuery(connectionTestQuery4);
  321. hikariConfig.setMaxLifetime(maxLifetime4);
  322. hikariConfig.setIdleTimeout(idleTimeout4);
  323. hikariConfig.setConnectionTimeout(connectionTimeout4);
  324. hikariConfig.setValidationTimeout(validTimeout4);
  325. return hikariConfig;
  326. }
  327. @Bean("child4SqlSessionFactory")
  328. public SqlSessionFactory child4SqlSessionFactoryBean(@Qualifier("child4Datasource") DataSource dataSource) throws Exception {
  329. SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
  330. sessionFactoryBean.setDataSource(dataSource);
  331. org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
  332. configuration.setCallSettersOnNulls(true); //数据库中字段值为null时也要求返回
  333. configuration.setMapUnderscoreToCamelCase(true); //开启驼峰映射
  334. configuration.setCacheEnabled(false);
  335. sessionFactoryBean.setConfiguration(configuration);
  336. return sessionFactoryBean.getObject();
  337. }
  338. @Bean("child4SqlSessionTemplate")
  339. public SqlSessionTemplate child4SqlSessionTemplate(@Qualifier("child4SqlSessionFactory") SqlSessionFactory sessionFactory) {
  340. return new SqlSessionTemplate(sessionFactory);
  341. }
  342. @Bean(name = "child4DbTransactionManager")
  343. public DataSourceTransactionManager child4DbTransactionManager(@Qualifier("child4Datasource") DataSource dataSource){
  344. return new DataSourceTransactionManager(dataSource);
  345. }
  346. @Bean
  347. public DBMgrProxy startDBMgrProxy(){
  348. DBMgrProxy.getInstance().init();
  349. return DBMgrProxy.getInstance();
  350. }
  351. }