我们想完成一个双重运行的设置,其中我们的应用程序在表中写入数据,该表的名称由JPA配置的表名称和任意后缀组成。
我们的应用程序使用带有Hibernate支持的Spring ORM的Spring Boot。
后缀应该易于配置,最好是通过Spring Boot的外部化配置。
以下是我们的SpringPhysicalNamingStrategy实现,该实现将后缀追加到表名。该后缀目前已进行硬编码。
import org.hibernate.boot.model.naming.Identifier;
import org.hibernate.boot.model.naming.PhysicalNamingStrategy;
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
import org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy;
import org.springframework.stereotype.Component;
import java.util.HashSet;
import java.util.Set;
import static java.util.Arrays.asList;
@Component
public class DoubleRunPhysicalNamingStrategy extends SpringPhysicalNamingStrategy implements PhysicalNamingStrategy {
private Set<String> tableNames = new HashSet<>(asList("AR", "AP"));
private String suffix = "_2";
@Override
public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment jdbcEnvironment) {
Identifier identifier =
super.toPhysicalTableName(name, jdbcEnvironment);
if (tableNames.contains(identifier.getText().toUpperCase())) {
return new Identifier(String.format("%s%s", identifier.getText(), suffix), identifier.isQuoted());
}
return identifier;
}
}
最后,上述物理命名策略是通过以下应用程序属性配置的: spring.jpa.hibernate.naming.physical-strategy = DoubleRunPhysicalNamingStrategy
我们尝试使用@Value和通过@Autowired的另一个组件来使后缀可配置,但是没有运气。两者均未接线,并且未分配。
有关如何实现此目标的任何建议?