Search This Blog

Sunday, November 25, 2018

Spring boot configuration to run both in websphere and tomcat with jta


if required to decalare additional configuration from dependancy jar modules use component scan
@SpringBootApplication(scanBasePackages = {"au.com.myserver.app.*", "au.com.otherApp.service.*"})

if required to exclude all datasource autoconfiguration
@SpringBootApplication(scanBasePackages = {"aa.bb.cc.*", "aa.bb.cd.ee.*"}, exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
//or can specify on application.properties or application.yaml
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration, org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration

creating Tomcat JNDI datasources

@Configuration@Profile({ "tomcat" })
public class TomcatWebConfiguration  {


    @Value("${spring.datasource.app.jdbc-url}")
    private String appDataSourceUrl;
    @Value("${spring.datasource.app.username}")
    private String appDataSourceUsername;
    @Value("${spring.datasource.app.password}")
    private String appDataSourcePassword;
    @Value("${spring.datasource.app.jndi-name}")
    private String appDataSourceJndi;

    @Bean    public TomcatServletWebServerFactory tomcatFactory() {
        return new TomcatServletWebServerFactory() {
            @Override  protected TomcatWebServer getTomcatWebServer(org.apache.catalina.startup.Tomcat tomcat) {
                tomcat.enableNaming();                
                return super.getTomcatWebServer(tomcat);
            }

            @Override  protected void postProcessContext(Context context) {

                // context                
                ContextResource resource = new ContextResource();
                resource.setName(appDataSourceJndi);                
                resource.setType(DataSource.class.getName());
                resource.setProperty("url", appDataSourceUrl);
                resource.setProperty("username", appDataSourceUsername);
                resource.setProperty("password", appDataSourcePassword);
                context.getNamingResources()
                        .addResource(resource);
            }

        };    
    }

}





for SprintBootTest use following to disable autoconfigure
@SpringBootTest(webEnvironment = WebEnvironment.DEFINED_PORT, properties = {"spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration"})



No comments: