- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在这里问了一个问题,但不完整,被标记为重复 here
因此,根据已经提出的问题 - @surasin-tancharoen 的一个特定答案似乎正是我所需要的。
但是,尝试这样做也会给我一个 NullPointerException
,因为数据源从未创建/注入(inject)。
详细信息如下:
在下面的代码中我定义了 2 个 bean。我已经使用 @Qualifier
注释和 @ConfigurationProperties
定义了两个数据源,以从属性文件中读取 JNDI 名称。
@Configuration
public class DataSourceConfig {
@Bean
@Primary
@Qualifier("ds1")
@ConfigurationProperties(prefix="spring.datasource1")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@Qualifier("ds2")
@ConfigurationProperties(prefix="spring.datasource2")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
}
在application.properties
中:
spring.datasource1.jndi-name=AbcDS
spring.datasource2.jndi-name=XyzDS
然后在我的 DAO 中 - 我尝试使用此数据源:
@Autowired
@Qualifier("ds1")
DataSource dataSource;
但是,由于我在这行代码中收到 NullPointerException
,因此数据源未注入(inject):
conn = dataSource.getConnection();
所有这一切都是通过将 Spring Boot 应用程序部署到 Weblogic 12c 来尝试的
最佳答案
该解决方案与“DataSourceBuilder”的错误使用有关,“DataSourceBuilder”不应用于 JNDI 数据源。
这是我如何让它工作的:(在weblogic上部署spring boot war并使用weblogic中定义的数据源)
首先我们指定weblogic中定义的数据源 - 这里我们指定weblogic中定义的数据源的JNDI名称:
spring.datasource.xyz.jndi-name=XYZDS
spring.datasource.test.jndi-name=TESTDS
这是使用上面定义的属性创建并公开数据源的位置:我们将 application.properties 中的属性注入(inject)到字符串变量中以存储数据源的 JNDI 名称。
@Configuration
public class DataSourceConfig {
@Value( "${spring.datasource.xyz.jndi-name}" )
private String xyzJndiName;
@Value( "${spring.datasource.test.jndi-name}" )
private String testJndiName;
@Bean(name = "XyzDataSource")
public DataSource getXyzDataSource() throws Exception {
JndiDataSourceLookup dataSourceLookup = new JndiDataSourceLookup();
return dataSourceLookup.getDataSource(xyzJndiName);
}
@Bean(name = "TestDataSource")
public DataSource getTestDataSource() throws Exception {
JndiDataSourceLookup dataSourceLookup = new JndiDataSourceLookup();
return dataSourceLookup.getDataSource(testJndiName);
}
需要注意的几个要点:我们不应该不对 JNDI 数据源使用“DataSourceBuilder” - 它不起作用。
这就是它在我的情况下不起作用的原因。
现在我使用“JndiDataSourceLookup”来实现这一点。
另一件事需要注意的是,我们需要使用带有“name”属性的标准 @Bean 注释。
这对于使用此数据源的代码段非常重要。现在数据源已成功创建并公开。
适宜食用时间:
@Repository
public class SomeDaoImpl {
@Autowired
@Qualifier("XyzDataSource")
DataSource dataSource;
@Override
public List <String> create(Employee request) {
Connection conn = null;
conn = dataSource.getConnection();
这里我们使用@Qualifier注释来选取适当的数据源。就是这样 - 现在可以了。我用其他数据源尝试过 - 它也有效。
注意:我不想接受我自己的答案 - 所以我会等待几天,如果其他人有更好、更优雅的解决方案,请回答 - 我会很乐意接受你的答案,而不是回答我自己的问题并接受!
关于java - Spring Boot Weblogic 12c JNDI 数据源 : injection not working gives NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56835284/
我是 JNDI 的新手,我阅读了 oracle 的在线资料: http://docs.oracle.com/javase/jndi/tutorial/getStarted/overview/index
什么是JNDI? 它的基本用途是什么? 什么时候使用? 最佳答案 What is JNDI ? 它代表Java Naming and Directory Interface . What is its
我有完整的应用服务器背景,并考虑在 Jetty 等轻量级嵌入式服务器上运行应用。 我一直使用 JNDI 来查找连接池以查找数据库连接之类的东西,但我想知道这是否是轻量级案例的最佳方法。似乎如果我使用
您如何使用 JDBCRealm处理servlet 中的用户身份验证和授权?我能找到的唯一示例是在 web.xml 中创建数据源(例如 Authentication against database u
命名和目录 (JNDI) - 使用 JNDI 的陷阱是什么 最佳答案 这个问题有点含糊,但这里有几点需要考虑并且与 JNDI 相关。 JNDI 的好处是对象创建与对象查找分离 在 JDNI 中直接查找
在 Wildfly 9 中显示注册的 JNDI 名称的正确方法是什么? 对于旧版本,可以使用 /subsystem=naming:jndi-view ,但它似乎不再起作用。在域模式下运行时。 感谢帮助
我有两个 JBoss 服务器,JbossA 和 JbossB。每个都有自己的 JNDI。现在我在 JbossA 上有一个名为 jms/Client 的 JMS,在 JbossB 上有一个名为 jms/
这是我的“hibernate.cfg.xml”,我正在尝试连接到我的本地主机(postgres),但我不确定我是否输入了参数值(例如连接 url 或其他) : org.hiber
是否可以通过 JNDI 访问 Wildfly 属性(在 standalone.xml 中定义)? 喜欢: ... 并在java中阅读它: @Resource(lo
第126章OSGI Enterprise Release 5 specification提到兼容性: "Support the traditional JNDI programming model u
import org.apache.catalina.Context; import org.apache.catalina.deploy.ContextResource; import org.ap
在我们的项目中,我们使用 websphere liberty 服务器和 IBM MQ 作为消息服务器。我们在云中移动。我们想用 AWS SQS 替换 IBM MQ。在 server.xml 中,我们有
似乎每个人都说您应该使用 Tomcat 的 JNDI 上下文来管理您的 JDBC 连接和驱动程序等等。在阅读了文档之后,我理解了平局。但是,如果您使用它,您的应用程序必须从现在开始一直使用 Tomca
我正在 JBoss7.1.1 应用程序服务器上部署我的 MDB (EJB3.1)。当我使用@Resource进行数据源注入(inject)时,我使用全局JNDI引用名称(ENC +本地JNDI引用名称
使用 JBoss eap 6.4.12 出现错误: Error looking up ${email.jndi.lookup.binding} in JNDI 在我的 java 类中映射此 JNDI
使用com.sun.jndi.fscontext.RefFSContextFactory基于文件的 JNDI 上下文工厂,它似乎只允许在您指定的位置有 1 个绑定(bind)文件。例如 Hashtab
这是我的persistence.xml: org.hibernate.ejb.HibernatePersistence jdbc/abcDS 这是来自 src/test
我已经为我的模块之一运行了强化扫描,我已经收到了 动态代码评估:JNDI 引用注入(inject)漏洞问题 显示在下一行 lookup(dataSource) 数据源是动态的。我应该怎么做才能防止这种
我有 EJB 3.1 中的 EJB,我试图将其部署在 JBoss EAP 6 中,但是当我启动服务器时。它在 JNDI 名称中附加版本号,如下所示。 18:27:57,068 INFO [org.j
我有一个测试,它成功地使用嵌入式 glassfish 来测试 JCA 的部署。 但是,与已经在使用端口 3700 的 GlassFish 2.1 的运行版本存在冲突。 如何将嵌入的 GlassFish
我是一名优秀的程序员,十分优秀!