Erstellen Sie ein neues Springboot-Projekt und führen Sie Web-, MySQL- und Mybatis-Abhängigkeiten ein.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency>
Konfigurieren Sie mehrere Datenquellen in application.properties
spring .datasource.primary.username=rootspring.datasource.primary.password=rootDatenquelle initialisieren Neu Eine Konfigurationsklasse, die zum Laden mehrerer Datenquellen verwendet wird, um die Initialisierung abzuschließen.spring.datasource.primary.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.secondary.password=root
spring.datasource.secondary. jdbc- url=jdbc:mysql://localhost:3306/ds1
spring.datasource.secondary.username=rootspring.datasource.secondary.driver-class-name=com. mysql.cj.jdbc.Driver
Der Unterschied zwischen der Konfiguration mit mehreren Datenquellen und der Konfiguration mit einer einzelnen Datenquelle besteht darin, dass es nach spring.datasource einen zusätzlichen Datenquellennamen gibt, der verschiedene Datenquellen unterscheidet.
@Configuration public class DataSourceConfiguration { @Primary @Bean @ConfigurationProperties(prefix = "spring.datasource.primary") public DataSource primaryDataSource() { return DataSourceBuilder.create().build(); } @Bean @ConfigurationProperties(prefix = "spring.datasource.secondary") public DataSource secondaryDataSource() { return DataSourceBuilder.create().build(); } }Sie können über @ConfigurationProperties wissen, dass diese beiden Datenquellen die Konfigurationen von spring.datasource.primary.* bzw. spring.datasource.secondary.* geladen haben. Wenn die Datenquelle nicht explizit angegeben ist, wird die durch die Annotation @Primary gekennzeichnete primäre Datenquelle verwendet. mybatis-Konfiguration
@Configuration @MapperScan( basePackages = "com*.primary", sqlSessionFactoryRef = "sqlSessionFactoryPrimary", sqlSessionTemplateRef = "sqlSessionTemplatePrimary") public class PrimaryConfig { private DataSource primaryDataSource; public PrimaryConfig(@Qualifier("primaryDataSource") DataSource primaryDataSource) { this.primaryDataSource = primaryDataSource; } @Bean public SqlSessionFactory sqlSessionFactoryPrimary() throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(primaryDataSource); return bean.getObject(); } @Bean public SqlSessionTemplate sqlSessionTemplatePrimary() throws Exception { return new SqlSessionTemplate(sqlSessionFactoryPrimary()); } }
@Configuration @MapperScan( basePackages = "com.*.secondary", sqlSessionFactoryRef = "sqlSessionFactorySecondary", sqlSessionTemplateRef = "sqlSessionTemplateSecondary") public class SecondaryConfig { private DataSource secondaryDataSource; public SecondaryConfig(@Qualifier("secondaryDataSource") DataSource secondaryDataSource) { this.secondaryDataSource = secondaryDataSource; } @Bean public SqlSessionFactory sqlSessionFactorySecondary() throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(secondaryDataSource); return bean.getObject(); } @Bean public SqlSessionTemplate sqlSessionTemplateSecondary() throws Exception { return new SqlSessionTemplate(sqlSessionFactorySecondary()); } }Die Annotation @MapperScan wird für die Konfigurationsklasse verwendet, um den Entitäts- und Mapper-Paketpfad anzugeben, der unter der aktuellen Datenquelle definiert ist. Außerdem werden sqlSessionFactory und sqlSessionTemplate eingefügt und die entsprechende Datenquelle über die Annotation @Qualifier angegeben , dessen Name dem durch die Datenquelle in der Konfigurationsklasse DataSourceConfiguration definierten Funktionsnamen entspricht. Entitäten und Mapper unter den entsprechenden Pfaden jedes Datenquellenpaares
@Data @NoArgsConstructor public class UserPrimary { private Long id; private String user_name; private Integer age; public UserPrimary(String name, Integer age) { this.user_name = name; this.age = age; } } public interface UserMapperPrimary { @Select("SELECT * FROM USER_0 WHERE USER_NAME = #{name}") UserPrimary findByName(@Param("name") String name); @Insert("INSERT INTO USER_0 (USER_NAME, AGE) VALUES(#{name}, #{age})") int insert(@Param("name") String name, @Param("age") Integer age); @Delete("DELETE FROM USER_0") int deleteAll(); }
@Data @NoArgsConstructor public class UserSecondary { private Long id; private String user_name; private Integer age; public UserSecondary(String name, Integer age) { this.user_name = name; this.age = age; } } public interface UserMapperSecondary { @Select("SELECT * FROM USER_1 WHERE USER_NAME = #{name}") UserSecondary findByName(@Param("name") String name); @Insert("INSERT INTO USER_1 (USER_NAME, AGE) VALUES(#{name}, #{age})") int insert(@Param("name") String name, @Param("age") Integer age); @Delete("DELETE FROM USER_1") int deleteAll(); }Test
@Test public void test() { // 往Primary数据源插入一条数据 userMapperPrimary.insert("caocao", 20); // 从Primary数据源查询刚才插入的数据,配置正确就可以查询到 UserPrimary userPrimary = userMapperPrimary.findByName("caocao"); Assert.assertEquals(20, userPrimary.getAge().intValue()); // 从Secondary数据源查询刚才插入的数据,配置正确应该是查询不到的 UserSecondary userSecondary = userMapperSecondary.findByName("caocao"); Assert.assertNull(userSecondary); // 往Secondary数据源插入一条数据 userMapperSecondary.insert("sunquan", 21); // 从Primary数据源查询刚才插入的数据,配置正确应该是查询不到的 userPrimary = userMapperPrimary.findByName("sunquan"); Assert.assertNull(userPrimary); // 从Secondary数据源查询刚才插入的数据,配置正确就可以查询到 userSecondary = userMapperSecondary.findByName("sunquan"); Assert.assertEquals(21, userSecondary.getAge().intValue()); }
Das obige ist der detaillierte Inhalt vonWie integriert Springboot mybatis, um die Konfiguration mehrerer Datenquellen zu implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!