gpt4 book ai didi

java - Tomcat 7 Datasource注入(inject)机制

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:46:12 24 4
gpt4 key购买 nike

我正在尝试创建简单的网络应用程序。并坚持数据源注入(inject)。似乎有几个问题。所以我将从我的困惑开始。据我了解,有 2 种(至少)方法可以将 DataSource 注入(inject) Servlet:

  • web.xml
  • @资源

web.xml 示例

<resource-ref>
<res-ref-name>jdbc/MyDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<injection-target>
<injection-target-class>ua.test.TestServlet</injection-target-class>
<injection-target-name>dataSource</injection-target-name>
</injection-target>
</resource-ref>

@Resource 示例

public class TestServlet extends HttpServlet{
@Resource
private DataSource dataSource;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

我的困惑:web.xml 在我的简单项目的 Tomcat 7 中不起作用。在我看来,web.xml 选项应该有效,因为在 Java 5 之前没有注释。请解释。

更新:

数据源配置

<Resource name="jdbc/MyDB" 
type="javax.sql.DataSource"
auth="Container"
username="SA"
password=""
driverClassName="org.hsqldb.jdbcDriver"
url="jdbc:hsqldb:file:~/database/my_db"
/>

最佳答案

尝试取出 injection-target输入 web.xml并使用 name @Resource 上的属性注释:

public class TestServlet extends HttpServlet {
@Resource(name = "jdbc/MyDB")
private DataSource dataSource;

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}

这在我使用 Tomcat 7.0.50 进行的本地测试中有效。如果您正在寻找无注释的方法,我还没有让它起作用,即使它应该给他们的更新日志 1 .

编辑

我仍然没有找到解决方案,但我很好奇为什么这不起作用,所以我查看了 injection-target代码。我发现它加载了 context.xml首先输入,并从 web.xml 中获取设置, 但选择不覆盖它在 context.xml 中找到的配置因为它已经看到一个 jdbc/MyDB入口。我不确定如何获得 injection-target设置到 context.xml或像 driverClassName 这样的数据库设置进入web.xml .

关于java - Tomcat 7 Datasource注入(inject)机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24040291/

24 4 0
文章推荐: java - 数字 "41794"和今天的日期(即 04/06/2014)之间有什么关系?
文章推荐: java - 使用正则表达式从字符串中提取键值对
文章推荐: java - 尝试使用 JSON 简单解析 JSON 时出现 NoClassDefFoundError
文章推荐: flatMap 返回 List 而不是 List 后,Java Stream 收集