springboot配置多数据源

来源:undefined 2025-06-14 02:28:06 0

在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的自动配置模块还是手动配置数据源,都可以实现多数据源的配置,根据具体需求选择适合的方法。

上一篇:vim自动补全 下一篇:alicode

最新文章