所述NamingStrategy已经被标记为在休眠4.2/4.3(弃用HHH-7079).从Hibernate 5开始,现在它将附带两个替换(?)接口ImplictNamingStrategy和PhysicalNamingStrategy(HHH-7078),并最终放弃了对旧版本的支持NamingStrategy.这就是为什么Spring即将推出的Hibernate5支持甚至删除了配置器namingStrategy()和支持implicitNamingStrategy()和physicalNamingStrategy().到现在为止还挺好.
虽然在一些文件(即不完整的工作-5.0-migration-guide.md)和即将发布的Hibernate 5(截至今天)的(生成)发行说明中提到过,但我没有找到具体的例子如何使用这些实际上.
也许我错过了一些东西,但是JavaDoc和问题都没有显示出这两种策略类型的任何证据.此外,我已经有一个策略基于NamingStrategy:一个OracleNamingStrategy基于众所周知的习惯.
虽然我对代码中的正确解决方案感兴趣(显然),但实际问题是获得有效的迁移文档和/或重构命名策略的概念.
还有关系:
目标是使用包含由数据库连接 (DataSource) 加载和生成的键和值的环境运行 Spring Boot 应用程序。
或者,更抽象的定义:虽然只应首选文件配置(更快、更容易、更宽容,...),但有时您会发现需要基于非静态文件的配置的用例。
Spring 3.1 引入了Environment它实际上是一个属性解析器(扩展PropertyResolver)并且基于对象列表PropertySource。这样的源是属性(文件或对象)、地图或其他东西的包装器/适配器。看起来真的是这样的获取方式。
Properties properties = new Properties();
properties.put("mykey", "in-config");
PropertiesPropertySource propertySource = new PropertiesPropertySource("myProperties", properties);
Run Code Online (Sandbox Code Playgroud)
但是,这不能在@Configuration类完成,因为它必须是可用的配置阶段。想想类似的事情
@Bean public MyService myService() {
if ("one".equals(env.getProperty("key")) {
return new OneService();
} else {
return new AnotherService();
}
}
// alternatively via
@Value("${key}")
private String serviceKey;
Run Code Online (Sandbox Code Playgroud)
此外,最近的 Spring 版本也支持Condition。
有一个OneCondition喜欢
public class OneCondition implements Condition {
@Override
public boolean matches(final ConditionContext context, final AnnotatedTypeMetadata …Run Code Online (Sandbox Code Playgroud)