我为一个特定的dao方法声明了以下bean,以使用与项目其余部分不同的数据源。
@Bean(name="kingsDataSource")
public DataSource kingsDataSource(){
JndiDataSourceLookup jndi = new JndiDataSourceLookup();
jndi.setResourceRef(true);
return jndi.getDataSource("dataSource/kings");
这里是使用那个bean。
@Resource(name="kingsDataSource")
private DataSource ds;
这里来自context.xml(省略了用户和密码,这些用户和密码已被验证为正确,如果它们错了,也会抛出不同的错误。)我也玩过这个在服务器的context.xml中,将它放在一个地方而不是另一个地方,并在两个地方都有它。
<Resource
name="dataSource/kings"
auth="Container"
type="com.mysql.jdbc.jdbc2.optional.MysqlDataSource"
factory="org.apache.naming.factory.BeanFactory"
URL="jdbc:mysql://kings/db_netlogs" />
错误是名称未找到例外 -
Caused by: javax.naming.NameNotFoundException: Name [dataSource/kings] is
not bound in this Context. Unable to find [dataSource].
那么,我的问题是 - 我该如何约束这个以及如何约束?
答案 0 :(得分:1)
尝试在您的web.xml中添加resource-ref
<resource-ref>
<res-ref-name>dataSource/kings</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>