新闻

新闻动态

良好的口碑是企业发展的动力

springboot配置多数据源

发布时间:2024-01-05 08:30:51 点击量:105
拖拽式网站建设

 

在Spring Boot中配置多数据源可以使用两种方法:使用Spring Boot的自动配置模块或者手动配置数据源。

 

***种方法是使用Spring Boot的自动配置模块。Spring Boot提供了一个叫做"spring-boot-starter-data-jpa"的组件,它默认使用Hibernate作为JPA实现,可以方便地配置多个数据源。

 

首先,需要在pom.xml文件中引入spring-boot-starter-data-jpa组件:

 

```

org.springframework.boot

spring-boot-starter-data-jpa

```

 

然后,在application.properties文件中进行配置,指定多个数据源的连接信息:

 

```

spring.datasource.url=jdbc:mysql://localhost:3306/db1

spring.datasource.username=root

spring.datasource.password=123456

 

spring.datasource.secondary.url=jdbc:mysql://localhost:3306/db2

spring.datasource.secondary.username=root

spring.datasource.secondary.password=123456

 

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false

```

 

接下来,在配置文件中创建多个数据源的配置类,分别对应不同的数据源:

 

```

@Configuration

@EnableTransactionManagement

@EnableJpaRepositories(

basePackages = "com.example.model.db1"

 

entityManagerFactoryRef = "db1EntityManagerFactory"

 

transactionManagerRef = "db1TransactionManager"

)

public class Db1DataSourceConfig {

 

@Primary

@Bean(name = "db1DataSource")

@ConfigurationProperties(prefix = "spring.datasource")

public DataSource db1DataSource() {

return DataSourceBuilder.create().build();

}

 

@Primary

@Bean(name = "db1EntityManagerFactory")

public LocalContainerEntityManagerFactoryBean db1EntityManagerFactory(

EntityManagerFactoryBuilder builder

 

@Qualifier("db1DataSource") DataSource dataSource

) {

return builder

.dataSource(dataSource)

.packages("com.example.model.db1")

.build();

}

 

@Primary

@Bean(name = "db1TransactionManager")

public PlatformTransactionManager db1TransactionManager(

@Qualifier("db1EntityManagerFactory") EntityManagerFactory db1EntityManagerFactory

) {

return new JpaTransactionManager(db1EntityManagerFactory);

}

}

 

@Configuration

@EnableTransactionManagement

@EnableJpaRepositories(

basePackages = "com.example.model.db2"

 

entityManagerFactoryRef = "db2EntityManagerFactory"

 

transactionManagerRef = "db2TransactionManager"

)

public class Db2DataSourceConfig {

 

@Bean(name = "db2DataSource")

@ConfigurationProperties(prefix = "spring.datasource.secondary")

public DataSource db2DataSource() {

return DataSourceBuilder.create().build();

}

 

@Bean(name = "db2EntityManagerFactory")

public LocalContainerEntityManagerFactoryBean db2EntityManagerFactory(

EntityManagerFactoryBuilder builder

 

@Qualifier("db2DataSource") DataSource dataSource

) {

return builder

.dataSource(dataSource)

.packages("com.example.model.db2")

.build();

}

 

@Bean(name = "db2TransactionManager")

public PlatformTransactionManager db2TransactionManager(

@Qualifier("db2EntityManagerFactory") EntityManagerFactory db2EntityManagerFactory

) {

return new JpaTransactionManager(db2EntityManagerFactory);

}

}

```

 

以上配置中,@EnableJpaRepositories指定了实体类的扫描路径、EntityManagerFactory的引用和事务管理器的引用。

 

第二种方法是手动配置数据源。这种方法需要自己配置数据源、实体管理器工厂和事务管理器,相对繁琐一些。

 

首先,需要在pom.xml文件中引入相应的数据库驱动,例如MySQL的驱动:

 

```

mysql

mysql-connector-java

runtime

```

 

然后,创建数据源的配置类,配置各个数据源的连接信息:

 

```

@Configuration

public class DataSourceConfig {

 

@Primary

@Bean(name = "db1DataSource")

@ConfigurationProperties(prefix = "spring.datasource")

public DataSource db1DataSource() {

return DataSourceBuilder.create().build();

}

 

@Bean(name = "db2DataSource")

@ConfigurationProperties(prefix = "spring.datasource.secondary")

public DataSource db2DataSource() {

return DataSourceBuilder.create().build();

}

}

```

 

接下来,创建两个实体管理器工厂的配置类,分别对应不同的数据源:

 

```

@Configuration

@EnableJpaRepositories(

basePackages = "com.example.model.db1"

 

entityManagerFactoryRef = "db1EntityManagerFactory"

 

transactionManagerRef = "db1TransactionManager"

)

public class Db1EntityManagerFactoryConfig {

 

@Primary

@Bean(name = "db1EntityManagerFactory")

public LocalContainerEntityManagerFactoryBean db1EntityManagerFactory(

EntityManagerFactoryBuilder builder

 

@Qualifier("db1DataSource") DataSource dataSource

) {

return builder

.dataSource(dataSource)

.packages("com.example.model.db1")

.build();

}

 

@Primary

@Bean(name = "db1TransactionManager")

public PlatformTransactionManager db1TransactionManager(

@Qualifier("db1EntityManagerFactory") EntityManagerFactory db1EntityManagerFactory

) {

return new JpaTransactionManager(db1EntityManagerFactory);

}

}

 

@Configuration

@EnableJpaRepositories(

basePackages = "com.example.model.db2"

 

entityManagerFactoryRef = "db2EntityManagerFactory"

 

transactionManagerRef = "db2TransactionManager"

)

public class Db2EntityManagerFactoryConfig {

 

@Bean(name = "db2EntityManagerFactory")

public LocalContainerEntityManagerFactoryBean db2EntityManagerFactory(

EntityManagerFactoryBuilder builder

 

@Qualifier("db2DataSource") DataSource dataSource

) {

return builder

.dataSource(dataSource)

.packages("com.example.model.db2")

.build();

}

 

@Bean(name = "db2TransactionManager")

public PlatformTransactionManager db2TransactionManager(

@Qualifier("db2EntityManagerFactory") EntityManagerFactory db2EntityManagerFactory

) {

return new JpaTransactionManager(db2EntityManagerFactory);

}

}

```

 

***,将这些配置类加入到主配置类的扫描路径中,使得Spring Boot能够找到并加载这些配置:

 

```

@SpringBootApplication

@Import({DataSourceConfig.class

Db1EntityManagerFactoryConfig.class

Db2EntityManagerFactoryConfig.class})

public class MultiDataSourceApplication {

 

public static void main(String[] args) {

SpringApplication.run(MultiDataSourceApplication.class

args);

}

}

```

 

以上就是在Spring Boot中配置多数据源的方法。无论是使用Spring Boot的自动配置模块还是手动配置数据源,都可以实现多数据源的配置,根据具体需求选择适合的方法。

免责声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,也不承认相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,请发送邮件至:dm@cn86.cn进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。本站原创内容未经允许不得转载。
上一篇: linux 查询ip
下一篇: /etc/sudoers