Blame view

zteits-job/src/main/java/com/zteits/job/config/datasource/MyBatisConfig.java 4.54 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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
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
  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 {
          String prefix = "park";
          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 {
          String prefix = "order";
          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);
      }
  
      /**
       * @Primary 该注解表示在同一个接口有多个实现类可以注入的时候,默认选择哪一个,而不是让@autowire注解报错
       * @Qualifier 根据名称进行注入,通常是在具有相同的多个类型的实例的一个注入(例如有多个DataSource类型的实例)
       */
      @Bean
      @Primary
      public DynamicDataSource dataSource(@Qualifier("parkDataSource") DataSource parkDataSource,
                                          @Qualifier("orderDataSource") DataSource orderDataSource) {
          Map<Object, Object> targetDataSources = new HashMap<>();
          targetDataSources.put(DatabaseType.park, parkDataSource);
          targetDataSources.put(DatabaseType.order, orderDataSource);
  
          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);
      }
  
  
  }