Spring jndi 注入 datasourse 为什么总是不正确

web小强 发布于 2014/12/24 17:10
阅读 510
收藏 0

刚开始学Spring 和jndi,按照网上的配置写的代码如下,但是总是不能输出需要的代码 ,但是 使用   ds = (DataSource) ctx.lookup("jdbc/zxdy");  的方法能够正确获取数据源 ,请各位大侠帮我分析一下,多多指点,不胜感激!

第一步 context的配置文件为

<Context>

 
       <Resource   
           driverClassName="com.mysql.jdbc.Driver"
           name="jdbc/zxdy"
                  auth="Container"
                  type="javax.sql.DataSource"
                  maxActive="100" maxIdle="30" maxWait="10000"
                  username="root" password="123456"
         url="jdbc:mysql://localhost:3306/zxdy"/>

</Context>


第二步 applicationcontext.xml

<beans default-autowire="byName"
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
 
 
  <!--通过JNDI获得数据源的引用-->
     <bean id="zxdyDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
         <property name="jndiName">
              <value>java:comp/env/jdbc/zxdy</value>
         </property>
     </bean>
    <!-- 配置JdbcTemplate的bean -->
     <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource">
           <ref local="zxdyDataSource"/>
        </property>
     </bean>
     <!-- 配置DBUtil的bean 并注入资源-->
     <bean id="DBUtil" class="com.DBUtil">
        <property name="jt">
           <ref local="jdbcTemplate"/>
        </property>
        <property name="ds">
            <ref local="zxdyDataSource"/>
        </property>
     </bean>  
     
         <bean id="com.doAction" class="com.doAction" >
        <property name="dbu">
           <ref local="DBUtil"/>
        </property>
    </bean>   

</beans>


第三个 数据库操作类 DBUtil

public class DBUtil{
    //private static final Logger log =  Logger.getLogger(ConnectionFactory.class);
    private JdbcTemplate jt;                                    //声明JdbcTemplate对象引用                        
    private List rl = null;                                        //声明List对象引用
    private String sql = null;                                //声明SQL字符串引用
    private DataSource ds;                                        //声明DataSource引用
    public void setJt(JdbcTemplate jt){                        //jt成员的setter方法
        this.jt = jt;    
        //设置jt属性的值
    }
    public JdbcTemplate getJt(){                        //jt成员的setter方法
        return jt;    
        //设置jt属性的值
    }
    public void setDs(DataSource ds){
        this.ds=ds;  
    }
    
    public DataSource getDs(){
        return ds;
        
    }
    

    public String getStringInfo(String sql){
        String info = null;                                        //声明返回字符串引用
        try{
            sql = new String(sql.getBytes(),"iso8859-1");        //对SQL语句转码
            info = (String)jt.queryForObject(sql,String.class);    //执行查询
            info = new String(info.getBytes("iso8859-1"),"gbk");//对查询的字符串转码
        }
        catch(Exception e){
            info = null;                                        //有异常发生则info置为null
        }
        return info;                                            //返回查询结果
    }

    
}

第四个文件 action类

public class doAction extends ActionSupport{
    protected DBUtil dbu;
    private String title;        //某一提问的标题
    public void setDbu(DBUtil dbu){
        this.dbu = dbu;                            //dbu的setter方法
    }
    public String getTitle(){
        System.out.println("返回title的时候"+title);
        return title;
    }
    @Override
    public String execute()throws Exception{
            String sql=null;            //查看详情
            sql = "select TTitle from DY_Topic where TID='6'";

            try{        
            System.out.println(sql);
            System.out.println(dbu.toString());
            title = dbu.getStringInfo(sql);                        //执行搜索得到提问标题
             System.out.println("SQL查询后给title的赋值"+title);
     }    catch (Exception e) {  
         System.out.println(e.getMessage());  
         }  
     /**/
            /* 使用红色代码可以输出需要的数据
            try {  
                DataSource ds = null;
                 Context initCtx = new InitialContext();  
                if (initCtx == null)  
                throw
                new Exception("Initial   Failed!");  
                Context ctx = (Context) initCtx.lookup("java:comp/env");  
                if (ctx != null)  
                ds = (DataSource) ctx.lookup("jdbc/zxdy");  
                if (ds == null)  
                throw new Exception("Look   up   DataSource   Failed");  
                
                java.sql.Connection conn = ds.getConnection();
                    Statement stmt = conn.createStatement();
                    ResultSet rs = stmt.executeQuery(sql);
                   while (rs.next()){
                       title=rs.getString(1);    
                       System.out.println("SQL查询后给title的赋值"+title);
                    }
                    rs.close();
                    stmt.close();
                    conn.close();
                }
             catch (Exception e) {  
             System.out.println(e.getMessage());  
             }  
            */
        return SUCCESS;
    }
}



加载中
返回顶部
顶部