gpt4 book ai didi

spring-boot - Spring 启动 + hibernate + Jboss 6.4

转载 作者:行者123 更新时间:2023-12-04 04:05:02 26 4
gpt4 key购买 nike

我在 JBoss 6.4 中部署的 WAR 中有一个 Spring 引导应用程序 (1.5.9)。我想使用自定义命名策略,但属性(和注释)被完全忽略了。我的应用启动器:

@SpringBootApplication
@ComponentScan
public class CedulasApiApplication extends SpringBootServletInitializer {

private static final String DATASOURCE_JNDI_NAME = "java:/ONLINE";

public static void main(String[] args) {
SpringApplication.run(CedulasApiApplication.class, args);
}

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(CedulasApiApplication.class);
}

@Bean
public DataSource dataSource() {
final JndiDataSourceLookup dsLookup = new JndiDataSourceLookup();
dsLookup.setResourceRef(true);
return dsLookup.getDataSource(DATASOURCE_JNDI_NAME);
}
}

我的自定义命名类:

public class CustomPhysicalNamingStrategy implements PhysicalNamingStrategy, Serializable {

public static final CustomPhysicalNamingStrategy INSTANCE = new CustomPhysicalNamingStrategy();

@Override
public Identifier toPhysicalCatalogName(Identifier name, JdbcEnvironment context) {
return capitalize(name);
}

@Override
public Identifier toPhysicalSchemaName(Identifier name, JdbcEnvironment context) {
return capitalize(name);
}

@Override
public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment context) {
return capitalize(name);
}

@Override
public Identifier toPhysicalSequenceName(Identifier name, JdbcEnvironment context) {
return capitalize(name);
}

@Override
public Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment context) {
return capitalize(name);
}

private Identifier capitalize(Identifier name) {
if (name == null)
return null;
if (name.isQuoted())
return name;
String text = name.getText().toUpperCase();
return Identifier.toIdentifier(text);
}

}

在我的 application.properties 中,我放置了我找到的所有可能的属性:

spring.jpa.hibernate.naming.physical-strategy=com.app.CustomPhysicalNamingStrategy
spring.jpa.properties.hibernate.physical_naming_strategy=com.app.database.CustomPhysicalNamingStrategy
org.springframework.boot.orm.jpa.SpringNamingStrategy=com.app.database.CustomPhysicalNamingStrategy
hibernate.physical_naming_strategy=com.app.database.CustomPhysicalNamingStrategy

@Table(name="...") 和 CustomPhysicalNamingStrategy 等实体注解会被忽略,不会出现任何错误。

有什么想法吗?

最佳答案

所以,基本上这个问题比我怀疑的要小得多,我会自动为面临同样问题的每个人回答我的问题,也许它能有所帮助。

对我的 JBoss 安装进行深入分析后,我在系统范围的属性文件中发现了这一点:

spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl
spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy

因此 spring 使用全局文件中的属性而不是 application.properties 中的属性。

我不明白这是否是正确的行为(我的逻辑告诉我不是),无论如何我只是通过删除全局属性定义解决了这个问题。

关于spring-boot - Spring 启动 + hibernate + Jboss 6.4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62666399/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com