Blame view

zteits-job/src/main/java/com/zteits/job/config/datasource/MyBatisConfig.java 4.44 KB
3a404b2a   zhaowg   空闲车位获取和推送
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
  package com.zteits.job.config.datasource;
  
  import com.alibaba.druid.pool.DruidDataSourceFactory;
  import org.apache.ibatis.session.SqlSessionFactory;
  import org.mybatis.spring.SqlSessionFactoryBean;
  import org.springframework.beans.factory.annotation.Qualifier;
  import org.springframework.context.EnvironmentAware;
  import org.springframework.context.annotation.Bean;
  import org.springframework.context.annotation.Configuration;
  import org.springframework.context.annotation.Primary;
  import org.springframework.core.env.Environment;
  import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
  import org.springframework.jdbc.datasource.DataSourceTransactionManager;
  
  import javax.sql.DataSource;
  import java.util.HashMap;
  import java.util.Map;
  import java.util.Properties;
  
  /**
   * springboot集成mybatis的基本入口 1)创建数据源(如果采用的是默认的tomcat-jdbc数据源,则不需要)
   * 2)创建SqlSessionFactory 3)配置事务管理器,除非需要使用事务,否则不用配置
   */
  @Configuration // 该注解类似于spring配置文件
  public class MyBatisConfig implements EnvironmentAware {
  
      private Environment environment;
  
      @Override
      public void setEnvironment(final Environment environment) {
          this.environment = environment;
      }
  
      /**
       * 创建数据源(数据源的名称:方法名可以取为XXXDataSource(),XXX为数据库名称,该名称也就是数据源的名称)
       */
      @Bean
      public DataSource parkDataSource() throws Exception {
83f7336e   zhaowg   增加方格地磁状态获取空闲车位数据推送
39
40
41
42
          return getDataSource("park");
      }
  
      private DataSource getDataSource(String prefix) throws Exception {
3a404b2a   zhaowg   空闲车位获取和推送
43
44
45
46
47
48
49
50
51
52
          Properties props = new Properties();
          props.put("driverClassName", environment.getProperty(prefix+"-datasource.driverClassName"));
          props.put("url", environment.getProperty(prefix+"-datasource.url"));
          props.put("username", environment.getProperty(prefix+"-datasource.username"));
          props.put("password", environment.getProperty(prefix+"-datasource.password"));
          return DruidDataSourceFactory.createDataSource(props);
      }
  
      @Bean
      public DataSource orderDataSource() throws Exception {
83f7336e   zhaowg   增加方格地磁状态获取空闲车位数据推送
53
54
55
56
57
58
          return getDataSource("order");
      }
  
      @Bean
      public DataSource sysDataSource() throws Exception {
          return getDataSource("sys");
3a404b2a   zhaowg   空闲车位获取和推送
59
60
61
62
63
64
65
66
67
      }
  
      /**
       * @Primary 该注解表示在同一个接口有多个实现类可以注入的时候,默认选择哪一个,而不是让@autowire注解报错
       * @Qualifier 根据名称进行注入,通常是在具有相同的多个类型的实例的一个注入(例如有多个DataSource类型的实例)
       */
      @Bean
      @Primary
      public DynamicDataSource dataSource(@Qualifier("parkDataSource") DataSource parkDataSource,
83f7336e   zhaowg   增加方格地磁状态获取空闲车位数据推送
68
69
                                          @Qualifier("orderDataSource") DataSource orderDataSource,
                                          @Qualifier("sysDataSource") DataSource sysDataSource) {
3a404b2a   zhaowg   空闲车位获取和推送
70
71
72
          Map<Object, Object> targetDataSources = new HashMap<>();
          targetDataSources.put(DatabaseType.park, parkDataSource);
          targetDataSources.put(DatabaseType.order, orderDataSource);
83f7336e   zhaowg   增加方格地磁状态获取空闲车位数据推送
73
          targetDataSources.put(DatabaseType.sys, sysDataSource);
3a404b2a   zhaowg   空闲车位获取和推送
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
  
          DynamicDataSource dataSource = new DynamicDataSource();
          dataSource.setTargetDataSources(targetDataSources);// 该方法是AbstractRoutingDataSource的方法
          dataSource.setDefaultTargetDataSource(parkDataSource);// 默认的datasource设置为myTestDbDataSource
  
          return dataSource;
      }
  
      /**
       * 根据数据源创建SqlSessionFactory
       */
      @Bean
      public SqlSessionFactory sqlSessionFactory(DynamicDataSource ds) throws Exception {
          PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
          SqlSessionFactoryBean fb = new SqlSessionFactoryBean();
          fb.setDataSource(ds);// 指定数据源(这个必须有,否则报错)
          // 下边两句仅仅用于*.xml文件,如果整个持久层操作不需要使用到xml文件的话(只用注解就可以搞定),则不加
          fb.setTypeAliasesPackage("com.zteits.**.domain");// 指定基包
          fb.setMapperLocations(resolver.getResources("classpath*:mybatis/**/*.xml"));//
          return fb.getObject();
      }
  
  
  
      /**
       * 配置事务管理器
       */
      @Bean
      public DataSourceTransactionManager transactionManager(DynamicDataSource dataSource) throws Exception {
          return new DataSourceTransactionManager(dataSource);
      }
  
  
  }