gpt4 book ai didi

spring-boot - SpringBoot - Websphere - Java 配置 - web.xml - 资源引用

转载 作者:行者123 更新时间:2023-12-01 02:45:25 31 4
gpt4 key购买 nike

我有一个 Web 应用程序,其中在 web.xml 中定义了 3 个 jndi 资源1 个用于数据库,2 个用于动态缓存

如何在 Spring boot 中将其转换为 Java 配置。

以下是应用程序中的示例资源引用配置

<resource-ref>
<description>Resource reference for database</description>
<res-ref-name>jdbc/dbname</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>

<resource-ref id="cache1">
<description>cache1 description</description>
<res-ref-name>cache/cache1</res-ref-name>
<res-type>com.ibm.websphere.cache.DistributedMap</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>

<resource-ref id="cache2">
<description>cache2 description</description>
<res-ref-name>cache/cache2</res-ref-name>
<res-type>com.ibm.websphere.cache.DistributedMap</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>

谢谢

最佳答案

Spring Boot 中的多个数据库

更多关于/字体:baeldung

Spring Boot可以简化上面的配置。

默认情况下,Spring Boot 将使用以 spring.datasource.* 为前缀的配置属性实例化其默认数据源:

spring.datasource.jdbcUrl = [url]
spring.datasource.username = [username]
spring.datasource.password = [password]

我们现在想继续使用相同的方式来配置第二个数据源,但使用不同的属性命名空间:

spring.second-datasource.jdbcUrl = [url]
spring.second-datasource.username = [username]
spring.second-datasource.password = [password]

因为我们希望 Spring Boot 自动配置选择那些不同的属性(并实例化两个不同的数据源),所以我们将定义两个类似于前面部分的配置类:

    @Configuration
@PropertySource({"classpath:persistence-multiple-db-boot.properties"})
@EnableJpaRepositories(
basePackages = "com.baeldung.multipledb.dao.user",
entityManagerFactoryRef = "userEntityManager",
transactionManagerRef = "userTransactionManager")
public class PersistenceUserAutoConfiguration {

@Primary
@Bean
@ConfigurationProperties(prefix="spring.datasource")
public DataSource userDataSource() {
return DataSourceBuilder.create().build();
}
// userEntityManager bean

// userTransactionManager bean
}

.

 @Configuration
@PropertySource({"classpath:persistence-multiple-db-boot.properties"})
@EnableJpaRepositories(
basePackages = "com.baeldung.multipledb.dao.product",
entityManagerFactoryRef = "productEntityManager",
transactionManagerRef = "productTransactionManager")
public class PersistenceProductAutoConfiguration {

@Bean
@ConfigurationProperties(prefix="spring.second-datasource")
public DataSource productDataSource() {
return DataSourceBuilder.create().build();
}

// productEntityManager bean

// productTransactionManager bean
}

现在我们已经根据引导自动配置约定在 persistence-multiple-db-boot.properties 中定义了数据源属性。

有趣的部分是使用@ConfigurationProperties 注释数据源bean 创建方法。我们只需要指定相应的配置前缀即可。在此方法中,我们使用 DataSourceBuilder,Spring Boot 将自动处理其余部分。

但是如何将配置的属性注入(inject)到数据源配置中呢?

当调用 DataSourceBuilder 的 build() 方法时,它会调用其私有(private)的 bind() 方法:

public T build() {
Class<? extends DataSource> type = getType();
DataSource result = BeanUtils.instantiateClass(type);
maybeGetDriverClassName();
bind(result);
return (T) result;
}

这个私有(private)方法执行了很多自动配置魔法,将解析的配置绑定(bind)到实际的 DataSource 实例:

private void bind(DataSource result) {
ConfigurationPropertySource source = new
MapConfigurationPropertySource(this.properties);
ConfigurationPropertyNameAliases aliases = new
ConfigurationPropertyNameAliases();
aliases.addAliases("url", "jdbc-url");
aliases.addAliases("username", "user");
Binder binder = new Binder(source.withAliases(aliases));
binder.bind(ConfigurationPropertyName.EMPTY, Bindable.ofInstance(result));
}

虽然我们自己不必接触任何这些代码,但了解 Spring Boot 自动配置的幕后情况仍然很有用。

除此之外,事务管理器和实体管理器 bean 配置与标准 Spring 应用程序相同。

关于spring-boot - SpringBoot - Websphere - Java 配置 - web.xml - 资源引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51924369/

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