配置Tomcat JNDI数据源

来源:互联网 发布:java字节流写入文件 编辑:程序博客网 时间:2024/06/07 01:05

以下示例基于Spring:

1、在Mysql中建立Spring数据库,数据库中建立user表

配置Tomcat JNDI数据源

2、在tomcat目录下conf\context.xml中的<Context>标签中加入

 

<Resource name="jndi"        auth="Container"        type="javax.sql.DataSource"        password="mysql5"        username="root"        driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/spring"        maxActive="5"        maxIdle="2"        maxWait="3000"    />

3、修改项目的web.xml文件,加入

<resource-ref>    <res-ref-name>jndi</res-ref-name>    <res-type>javax.sql.DataSource</res-type>    <res-auth>Container</res-auth></resource-ref>

4、在spring配置文件中配置Datasource

<bean id="dataSource"        class="org.springframework.jndi.JndiObjectFactoryBean">        <property name="jndiName" value="java:comp/env/jndi"/>    </bean>

我们也可以采用下面的方式,但是要加入以下命名空间 :
xmlns:jee="http://www.springframework.org/schema/jee"

xsi:schemaLocation="http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-2.5.xsd">

<!-- Spring 2.0为获取J2EE资源提供了一个jee命名空间,通过jee命名空间,可以有效地简化J2EE资源的引用。 -->    <jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jndi"/>

具体sample如下所示:

配置Tomcat JNDI数据源

User.java

package cn.nevo.model;import org.springframework.stereotype.Component;/** * Entity * @author Administrator * */@Component("user")public class User {    private String username;    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }}

UserDao.java

package cn.nevo.dao;import cn.nevo.model.User;public interface UserDao {    public void save(User user);}

UserDaoImpl.java

package cn.nevo.dao.impl;import java.sql.Connection;import java.sql.SQLException;import javax.annotation.Resource;import javax.sql.DataSource;import org.springframework.stereotype.Component;import cn.nevo.dao.UserDao;import cn.nevo.model.User;@Component("userDao")public class UserDaoImpl implements UserDao {    private DataSource dataSource;    public DataSource getDataSource() {        return dataSource;    }    //默认是by name注入    @Resource    public void setDataSource(DataSource dataSource) {        this.dataSource = dataSource;        System.out.println(dataSource);    }    public void save(User user) {        Connection conn = null;        try {            conn = dataSource.getConnection();            conn.createStatement().executeUpdate("insert into user values (null, '" +user.getUsername()+"')");        } catch (SQLException e) {            e.printStackTrace();        } finally {            try {                conn.close();            } catch (SQLException e) {                e.printStackTrace();            }        }        System.out.println("user saved!");    }}

UserService.java

package cn.nevo.service;import javax.annotation.Resource;import org.springframework.stereotype.Component;import cn.nevo.dao.UserDao;import cn.nevo.model.User;@Component("userService")public class UserService {    private UserDao userDao;    public UserDao getUserDAO() {        return userDao;    }    @Resource(name = "userDao")    public void setUserDAO(UserDao userDao) {        this.userDao = userDao;    }    public void add(User user) {        userDao.save(user);    }}

LoginServlet.java

package cn.nevo.servlet;import java.io.IOException;import javax.annotation.Resource;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import cn.nevo.model.User;import cn.nevo.service.UserService;@SuppressWarnings("serial")public class LoginServlet extends HttpServlet {    private User user;    public User getUser() {        return user;    }    @Resource    public void setUser(User user) {        this.user = user;    }    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        user.setUsername(request.getParameter("username"));        ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");        UserService userService = (UserService)ctx.getBean("userService");        userService.add(user);    }}

bean.xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:context="http://www.springframework.org/schema/context"    xmlns:aop="http://www.springframework.org/schema/aop"    xmlns:jee="http://www.springframework.org/schema/jee"    xsi:schemaLocation="http://www.springframework.org/schema/beans           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd           http://www.springframework.org/schema/context           http://www.springframework.org/schema/context/spring-context-2.5.xsd           http://www.springframework.org/schema/aop           http://www.springframework.org/schema/aop/spring-aop-2.5.xsd           http://www.springframework.org/schema/jee           http://www.springframework.org/schema/jee/spring-jee-2.5.xsd">    <!--        隐式注册 post-processors 包括了        AutowiredAnnotationBeanPostProcessor,CommonAnnotationBeanPostProcessor,PersistenceAnnotationBeanPostProcessor,        也包括了前面提到的 RequiredAnnotationBeanPostProcessor。处理我们配置的annotation    -->    <context:annotation-config />    <!--        要检测这些类并注册相应的bean,需要在XML中包含以下元素,其中'basePackage'是类的公共父包        (或者可以用逗号分隔的列表来分别指定包含各个类的包)。    -->    <context:component-scan base-package="cn.nevo" />    <!-- 从Tomcat配置的JNDI服务获取数据源-->    <!--    <bean id="dataSource"        class="org.springframework.jndi.JndiObjectFactoryBean">        <property name="jndiName" value="java:comp/env/jndi"/>    </bean>     -->    <!-- Spring 2.0为获取J2EE资源提供了一个jee命名空间,通过jee命名空间,可以有效地简化J2EE资源的引用。 -->    <jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jndi"/></beans>

index.jsp

<body>    <form action="loginServlet" method="post">         UserName:<input type="text" name="username">        <input type="submit" value="Login">    </form></body>

启动tomcat访问:
配置Tomcat JNDI数据源

 

配置Tomcat JNDI数据源

 

0 0