Reputation: 1138
I have a Spring boot app (1.5.9) in a WAR deployed in JBoss 6.4. I want to use a custom naming strategy, but properties (and annotations) are completely ignored. My app starter:
@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);
}
}
my custom naming class:
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);
}
}
and in my application.properties I've put ALL the possible properties I've found:
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
Entity annotations like @Table(name="...") and CustomPhysicalNamingStrategy are simply ignored, with no error whatsoever.
Any Idea?
Upvotes: 3
Views: 200
Reputation: 1138
So, basically the problem was much more trivial than I suspected, I'll auto answer my question for everyone who is facing the same problem, maybe it can help.
Doing a deep analysis of my JBoss installation I've discovered this in a system-wide properties file:
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
So spring are using properties from global file instead those from application.properties.
I don't understand if it is the correct behaviour (my logic tell me not), anyway I've resolved the issue simply by deleting global properties definitions.
Upvotes: 1