使用@Convert(converter = Xxx.class) 与特定数据源无关。您应该可以在每个@Entity 中使用转换器。
这是一个工作演示:multi-datasource-converter
它在多个数据源上使用您引用的转换器。
片段
application.properties
foo.datasource.jdbcUrl=jdbc:h2:mem:foo
foo.datasource.username=sa
foo.datasource.password=
foo.datasource.driver-class-name=org.h2.Driver
bar.datasource.jdbcUrl=jdbc:h2:mem:bar
bar.datasource.username=sa
bar.datasource.password=
bar.datasource.driver-class-name=org.h2.Driver
数据源的配置,选择一个作为@Primary 并将两个EntityManagerFactoryBuilders 指向正确的包
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "fooEntityManagerFactory",
transactionManagerRef = "fooTransactionManager",
basePackageClasses = FooRepository.class)
public class FooJpaConfiguration {
@Primary
@Bean(name = "fooDataSource")
@ConfigurationProperties(prefix = "foo.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Primary
@Bean(name = "fooEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
EntityManagerFactoryBuilder builder, @Qualifier("fooDataSource") DataSource dataSource) {
return builder.dataSource(dataSource).packages("com.example.demo.foo").persistenceUnit("foo")....
....
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "barEntityManagerFactory",
transactionManagerRef = "barTransactionManager",
basePackageClasses = BarRepository.class )
public class BarJpaConfiguration {
@Bean(name = "barDataSource")
@ConfigurationProperties(prefix = "bar.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "barEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean barEntityManagerFactory(
EntityManagerFactoryBuilder builder, @Qualifier("barDataSource") DataSource dataSource) {
return builder.dataSource(dataSource).packages("com.example.demo.bar").persistenceUnit("bar")
并在您的实体中使用转换器
package com.example.demo.foo;
...
@Entity
public class Foo {
@Id
private Long id;
private String name;
@Convert(converter = StringEncryptDecryptConverter.class)
private String secret;
....
package com.example.demo.bar;
...
@Entity
public class Bar {
@Id
private Long id;
private String name;
@Convert(converter = StringEncryptDecryptConverter.class)
private String secret;