GVKun编程网logo

JNDI路径Tomcat与Jboss(tomcat jdk路径)

7

在这里,我们将给大家分享关于JNDI路径Tomcat与Jboss的知识,让您更了解tomcatjdk路径的本质,同时也会涉及到如何更有效地200.SpringBootJNDI:在Tomcat中怎么玩J

在这里,我们将给大家分享关于JNDI路径Tomcat与Jboss的知识,让您更了解tomcat jdk路径的本质,同时也会涉及到如何更有效地200. Spring Boot JNDI:在Tomcat中怎么玩JNDI?、Angular 自动编译部署 Tomcat Jboss、Apache/Tomcat/JBOSS/Nginx区别、java – Mysql没有与JNDI Tomcat 6重新连接的内容。

本文目录一览:

JNDI路径Tomcat与Jboss(tomcat jdk路径)

JNDI路径Tomcat与Jboss(tomcat jdk路径)

我有在Tomcat 6中的context.xml中配置为MyDataSource的数据源。我通过以下方式获取它:

      DataSource dataSource;            try {                dataSource = (DataSource) new InitialContext().lookup("java:comp/env/MyDataSource");            } catch (NamingException e) {                throw new DaoConfigurationException(                    "DataSource ''" + url + "'' is missing in JNDI.", e);            }

一切正常。现在,我将此代码导出到Jboss AP6。我以相同的名称将dataSource及其连接池配置为local-tx dataSource。

当我执行上面的代码时,我得到了NamingException异常。经过一些调查,我发现在Jboss下调用我的DataSource的正确方法是

 dataSource = (DataSource) new InitialContext().lookup("java:/MyDataSource");

谁能解释我为什么在Jboss下的JNDI路径中省略“ comp / env”?

答案1

小编典典

定义数据源的可移植方法是使用 _ 资源引用
。资源引用使您能够相对于应用程序命名上下文(java:comp/env)为数据源定义JNDI名称,然后将该 _逻辑引用
映射到应用程序服务器中定义的
物理资源 ,该 资源 的JNDI名称是应用程序服务器供应商 专有 的。这种方法使您的代码和程序集可移植到任何兼容的应用程序服务器。

步骤1:声明和查找资源参考

选项1

这可以通过resource-ref在Web部署描述符(WEB-INF/web.xml)中声明一个来完成:

<resource-ref>    <description>My Data Source.</description>    <res-ref-name>jdbc/MyDataSource</res-ref-name>     <res-type>javax.sql.DataSource</res-type>    <res-auth>Container</res-auth></resource-ref>

在您的代码内,您可以使用JNDI名称查找此资源java:comp/env/jdbc/MyDataSource

dataSource = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/MyDataSource");

无论将应用程序部署在哪个服务器上,此JNDI名称都不会更改。

选项2

或者,从Java EE 5(Servlet
2.5)开始,使用@Resource注释可以在代码中更轻松地完成此操作。这消除了在Web部署描述符(web.xml)中配置resource-
ref的需要,并避免了执行显式JNDI查找的需要:

public class MyServlet extends HttpServlet {    @Resource(name = "jdbc/MyDataSource")    private DataSource dataSource;    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        // dataSource may be accessed directly here since the container will automatically        // inject an instance of the data source when the servlet is initialized}

这种方法的结果与先前的选项相同,但是减少了程序集中的样板代码和配置。

步骤2:将资源引用映射到数据源

然后,您将需要使用应用程序服务器的专有方法将资源引用映射到您在服务器上创建的 物理数据源 ,例如,使用JBoss的自定义部署描述符(WEB-INF/jboss-web.xml):

<?xml version="1.0" encoding="UTF-8"?><jboss-web>    <resource-ref>        <res-ref-name>jdbc/MyDataSource</res-ref-name>        <res-type>javax.sql.DataSource</res-type>        <jndi-name>java:/MyDataSource</jndi-name>    </resource-ref></jboss-web>

或者,例如,使用Tomcat的context.xml

<Resource name="jdbc/MyDataSource" . . . />

200. Spring Boot JNDI:在Tomcat中怎么玩JNDI?

200. Spring Boot JNDI:在Tomcat中怎么玩JNDI?

 

 

【视频&交流平台】

à SpringBoot视频http://t.cn/R3QepWG

à SpringCloud视频http://t.cn/R3QeRZc

à Spring Boot源码https://gitee.com/happyangellxq520/spring-boot

à Spring Boot交流平台http://412887952-qq-com.iteye.com/blog/2321532

à Spring Boot Shiro视频:http://t.cn/R3QDMbh

à Spring Boot 2.0 之Spring Data 和JPAhttp://t.cn/R1pSojf

 

历史相关文章:

199. Spring Boot JNDI:这是虾米?

前言:

       在上一节中,我们介绍了《Spring Boot JNDI:这是虾米?》,为了大家更好的理解什么是JNDI,这里就带大家一起看看,在Tomcat中是如何玩JNDI的。

       Tomcat配置JNDI有全局配置和局部配置。大致的有以下三种配置方式:

(1)全局配置:基于context.xml的配置。

(2)局部配置:基于server.xml的配置。

(3)局部配置:基于META-INF 的配置。

 

第一种:全局配置:基于context.xml的配置

1)在tomcat的conf/context.xml配置文件中加入(代码支持左右滑动):

 

<?xml version="1.0" encoding="UTF-8"?>
<Context >  
<Resource name="jdbc/mydb"
    auth="Container"
    type="javax.sql.DataSource"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost:3306/mydb"
    username="root" password="root"
    maxActive="20" maxIdle="10"
    maxWait="10000"/>

</Context>

 

特别注意:如果是使用了eclipse进行开发测试的话,可能会碰到如下的异常信息:

Cannot create JDBC driver of class '''' for connect URL ''null''

      这是由于context.xml是在开发工具中的servers下的/context.xml,所以需要将配置信息配置servers/Tomcat/context.xml。

2)在项目的web.xml中加入资源引用(非必须的):

    <resource-ref>   
       <description>DB Connection</description>  
       <res-ref-name>jdbc/mydb</res-ref-name>  
       <res-type>javax.sql.DataSource</res-type>  
       <res-auth>Container</res-auth>  
   </resource-ref>  

其中res-ref-name值要和context.xml的name值一致。

特别说明:这个配置是可有可无的,不配置这个的话,也是可以正常运行的。

3)在jsp中调用加载jndi方式:

    Connection conn =null;
     try{
          //初始化查找命名空间
          Context ctx = new InitialContext();
          //InitialContext ctx = new InitialContext();亦可
          //找到DataSource,对名称进行定位java:comp/env是必须加的,后面跟你的DataSource名
          DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/mydb");
          //取出连接
           conn = ds.getConnection();
          String sql = "select *from test";
          PreparedStatement ps = conn.prepareStatement(sql);
          ResultSet rs = ps.executeQuery();
           while(rs.next()){
                System.out.println("id:"+rs.getInt("id")+",name:"+rs.getString("name")+"");
           }
          out.println(conn);
          out.println(conn.isClosed());
          out.println("</br>");
           System.out.println("connection pool connected !!");  
     } catch (NamingException e) {
      System.out.println(e.getMessage());
     } catch (SQLException e) {
      e.printStackTrace();
     }finally{
          //注意不是关闭,是放回连接池.
          conn.close();
     }

特别注意:不可以直接用main方法测试,必须通过启动容器从jsp中调用

第二种:局部配置:基于server.xml的配置(不推荐使用)

在tomcat的server.xml的<host>标签内,添加:

   <Context docBase="demo-jndi" path="/demo-jndi">
          <Resource name="jdbc/mydb"
            auth="Container"
            type="javax.sql.DataSource"
            driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://localhost:3306/mydb"
            username="root" password="root"
            maxActive="20" maxIdle="10"
           maxWait="10000"/>

         </Context>

其他配置同第一种方式。

第三种:局部配置:基于META-INFO的配置

在项目的META-INF 下面新建context.xml加入:

<?xml version="1.0" encoding="UTF-8"?>
<Context >  
<Resource name="jdbc/mydb"
    auth="Container"
    type="javax.sql.DataSource"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost:3306/mydb"
    username="root" password="root"
    maxActive="20" maxIdle="10"
    maxWait="10000"/>

</Context>

其他配置同第一种方式。

 

总结:

如果要配置局部的话,推荐使用第三种方式,这样不依赖tomcat了。但是还是推荐使用第一种方式好,虽然依赖Tomcat,但是是全局的,而且可以配置多个。对于以后切换使用方便。另外在项目的web.xml中添加的资源引用可有可无。

好了本篇对于Tomcat怎么玩JNDI的篇章就到此告一段落了,下一篇《SpringBoot中怎么JNDI – 还是有坑的》。

 

「SpringCloud视频最近更新:

 

24. 覆写Feign的默认配置Configuration之Contract
25. Spring Cloud中关于Feign的常见问题总结
26. 解决Spring Cloud中FeignRibbon第一次请求失败的方法
27. Feign添加 fallbackFactory 属性来触发请求进行容灾降级
28. 断路器Hystrix总结
29. Health Indicator(健康指标) 和metrics stream(指标流)
30. 断路器监控(Hystrix Dashboard)
31. 断路器聚合监控(turbine)

 SpringCloud视频http://t.cn/R3QeRZc

 

 

微信公众号「SpringBoot最近更新:

 

Java8新特性:接口的默认方法
208. Spring Boot Swagger2:排序 – 漂游记
207. Spring Boot Swagger2:极简方式
我读的书很多,但都没有你好看【一禅录】
206. Spring Boot 2.0 Swagger2:使用
205. Spring Boot 2.0 Swagger2:初识Swagger
当要离开的时候,我却动情了
205. jetcache:你需要知道的小技巧
204. jetcache:在Spring Boot中怎么玩?
遇见阿里,遇见自己
203. 阿里jetcache
202. 阿里Pandora Boot
微信公众号赞赏功能升级了,真的假的?
《喜剧之王》「我养你啊」之人生选择
201. Spring Boot JNDI:Spring Boot中怎么玩JNDI
510阿里日,马老师献上最走心、最科技范儿证婚词~
200. Spring Boot JNDI:在Tomcat中怎么玩JNDI?
199. Spring Boot JNDI:这是虾米?
Spring Boot 数据库迁移系列
Spring Boot葵花宝典:初露锋芒:MyBatis insert异常 Parameter ''name'' not found
198. Spring Boot Flyway工作原理

 搜索springboot或者扫描以下二维码即可关注:

Angular 自动编译部署 Tomcat Jboss

Angular 自动编译部署 Tomcat Jboss

将Angular部署到Tomcat、Jboss中

修改package.json文件

"scripts": {
        //...
        "build": "ng build",//...
    },
修改之后

--base-href指项目的路由路径,最终生成:<base href="/demo/dist/">

--output-path指项目编译路径

--delete-output-path=false指不清空“/dist”文件夹

"scripts": {
        //...
        "build": "ng build --base-href /demo/dist/ --output-path D:/work/demo/src/main/webapp/dist --delete-output-path=false",

启动编译

编译完成之后,打开 编译路径,然后启动对应的容器

npm run build

路由刷新页面404

修改路由方式,在跟路由中启动 hash模式
RouterModule.forRoot(ROUTES,{ useHash: true })

Apache/Tomcat/JBOSS/Nginx区别

Apache/Tomcat/JBOSS/Nginx区别

先说ApacheTomcat的区别:

Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。
  在Apache基金会里面ApacheServer永远会被赋予最大的支持,毕竟大儿子最亲嘛,而Apache的开源服务器软件Tomcat同样值得关注,毕竟Tomcat是开源免费的产品,用户会给予最大的支持。但是经常在用ApacheTomcat等这些服务器时,你总感觉还是不清楚他们之间有什么关系,在用Tomcat的时候总出现Apache,总感到迷惑,到底谁是主谁是次,因此特意在网上查询了一些这方面的资料,总结了一下。
解析一:
Apache支持静态页,Tomcat支持动态的,比如Servlet等,
  一般使用Apache+Tomcat的话,Apache只是作为一个转发,对JSP的处理是由Tomcat来处理的。
Apche可以支持PHPcgiperl,但是要使用Java的话,你需要TomcatApache后台支撑,将Java请求由Apache转发给Tomcat处理。
ApacheWeb服务器,Tomcat是应用(Java)服务器,它只是一个Servlet(JSP也翻译成Servlet)容器,可以认为是Apache的扩展,但是可以独立于Apache运行。

这两个有以下几点可以比较的:
两者都是Apache组织开发的
两者都有HTTP服务的功能
两者都是免费的
  不同点:
Apache是专门用了提供HTTP服务的,以及相关配置的(例如虚拟主机、URL转发等等)
TomcatApache组织在符合Java EEJSPServlet标准下开发的一个JSP服务器
Runtime r=Runtime.getRuntime(); Process p=null; try { p=r.exec("notepad"); } catch(Exceptionex) { System.out.println("fffff"); } 

解析二:
Apache是一个Web服务器环境程序,启用他可以作为Web服务器使用,不过只支持静态网页(ASP,PHP,CGI,JSP)等动态网页的就不行。
  如果要在Apache环境下运行JSP的话就需要一个解释器来执行JSP网页,而这个JSP解释器就是Tomcat,为什么还要JDK呢?因为JSP需要连接数据库的话就要jdk来提供连接数据库的驱程,所以要运行JSPWeb服务器平台就需要Apache+Tomcat+JDK
  整合的好处是:
如果客户端请求的是静态页面,则只需要Apache服务器响应请求。
如果客户端请求动态页面,则是Tomcat服务器响应请求。
因为JSP是服务器端解释代码的,这样整合就可以减少Tomcat的服务开销。
C是一个结构化语言,如谭老爷子所说:它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制),而对于C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。
解析三:
Apache:侧重于HTTPServer 
Tomcat:侧重于Servlet引擎,如果以Standalone方式运行,功能上与Apache等效支持JSP,但对静态网页不太理想;
ApacheWeb服务器,Tomcat是应用(Java)服务器,它只是一个Servlet(JSP也翻译成Servlet)容器,可以认为是Apache的扩展,但是可以独立于Apache运行。

PS:至于为什么要集成TomcatApache,原因是

Tomcat的最主要的功能是提供Servlet/JSP容器,尽管它也可以作为独立的Java Web 

务器,但在对静态资源(如HTML 文件或图像文件)的处理速度,以及提供的Web 服务器

管理功能方面Tomcat都不如其他专业的HTTP服务器,如IISApache服务器。

因此在实际应用中,常常把Tomcat 与其他HTTP 服务器集成。对于不支持Servlet/JSP

HTTP服务器,可以通过Tomcat服务器来运行Servlet/JSP组件。

Tomcat与其他HTTP服务器集成时,Tomcat服务器的工作模式通常为进程外的Servlet

容器,Tomcat 服务器与其他HTTP 服务器之间通过专门的插件来通信。

1.1)独立的Servlet容器
在这种模式下,Tomcat可以作为独立的Java Web服务器,Servlet容器作为构成Web服务器的一部分而存在。独立的Servlet容器是Tomcat的默认模式

23.2)进程内的Servlet容器

Servlet容器分为Web服务器插件和Java容器两部分。Web服务器插件在其他Web服务器内部地址空间打开一个Java虚拟机,Java容器在此JVM中运行Servlet。如有客户端发出调用Servlet的请求,插件获得对此请求的控制并将它传递给Java容器。进程内Servlet容器对于单进程、多进程的服务器非常适合,可以提供较高的运行速度,单缺乏伸缩性。

4.5.3)进程外的Servlet容器

Servlet容器分为Web服务器插件和java容器两部分。Web服务器插件在其他Web服务器的外部地址空间打开一个JVMjava容器在此JVM中运行Servlet。如有客户端发出调用Servlet的请求,插件获得对此请求的控制并将它传递给java容器。进程外Servlet容器对客户请求的响应速度不如进程内容器,但进程外容器具有更好的伸缩性和稳定性。

Tomcat既可作为独立的Servlet容器,也可和其他的Web服务器集成,作为进程内的Servlet容器或者进程外的Servlet容器。在说TomcatJetty的区别:

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器(主要用于解析servlet/JSP,同时具备http服务),技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可。其运行时占用的系统资源小,扩展性好,且支持负载平衡与邮件服务等开发应用系统常用的功能。作为一个小型的轻量级应用服务器,Tomcat在中小型系统和并发访问用户不是很多的场合下被普遍使用,成为目前比较流行的Web 应用服务器。
  而Jetty采用业界最优的开源Java Web引擎,Java社区中下载量最大,用户数最多,标准支持最完备的Tomcat内核作为其Servlet容器引擎,并加以审核和调优。单纯的Tomcat性能有限,在很多地方表现有欠缺,如活动连接支持、静态内容、大文件和HTTPS等。除了性能问题,Tomcat的另一大缺点是它是一个受限的集成平台,仅能运行Java应用程序。企业在使用时Tomcat,往往还需同时部署Apache WebServer以与之整合。此配置较为繁琐,且不能保证性能的优越性。
Jetty通过使用APRTomcat本地技术的混合模型来解决Tomcat的诸多不足。混合技术模型从最新的操作系统技术里提供了最好的线程和事件处理。结果,Jetty达到了可扩展性,性能参数匹配甚至超越了本地Apache HTTP服务器或者IIS。譬如Jetty能够提供数据库连接池服务,不仅支持 JSP  Java 技术,同时还支持其他 Web 技术的集成,譬如PHP.NET 两大阵营。
  标准化是减小技术依赖风险,保护投资最好的方式。Jerry率先支持全系列JEE Web标准,从根本上保证了应用一次开发,到处运行的特点,使应用成品能方便地在Jetty和其他Java Web服务器之间轻易迁移。

相同点:

都是web容器,作用基本一致,都作为jboss的集成的web容器(有tomcat版的jboss、也有jetty版的jboss,即4.0以后的版本)

区别:

实现机制稍有不同,Jetty性能更优

Nginx / Apache/ lighttpd 的区别:

1. lighttpd

Lighttpd是一个具有非常低的内存开销,cpu占用率低,效能好,以及丰富的模块等特点。lighttpd是众多OpenSource轻量级的web server中较为优秀的一个。支持FastCGI, CGI, Auth, 输出压缩(outputcompress), URL重写, Alias等重要功能。

Lighttpd使用fastcgi方式运行php,它会使用很少的PHP进程响应很大的并发量。

Fastcgi的优点在于:

· 从稳定性上看, fastcgi是以独立的进程池运行来cgi,单独一个进程死掉,系统可以很轻易的丢弃,然后重新分配新的进程来运行逻辑.

· 从安全性上看, fastcgi和宿主的server完全独立, fastcgi怎么down也不会把server搞垮,

· 从性能上看, fastcgi把动态逻辑的处理从server中分离出来大负荷的IO处理还是留给宿主server, 这样宿主server可以一心一意作IO,对于一个普通的动态网页来说逻辑处理可能只有一小部分大量的图片等静态IO处理完全不需要逻辑程序的参与(1)

· 从扩展性上讲, fastcgi是一个中立的技术标准完全可以支持任何语言写的处理程序(php,java,python...)

2.apache

apache是世界排名第一的web服务器根据netcraft(www.netsraft.co.uk)所作的调查,世界上百分之五十以上的web服务器在使用apache.

19954最早的apache(0.6.2)apache group公布发行. apache group 是一个完全通过internet进行运作的非盈利机构由它来决定apache web服务器的标准发行版中应该包含哪些内容准许任何人修改隐错提供新的特征和将它移植到新的平台上以及其它的工作当新的代码被提交给apache group该团体审核它的具体内容进行测试如果认为满意该代码就会被集成到apache的主要发行版中.

apache 的特性:

1) 几乎可以运行在所有的计算机平台上.

2) 支持最新的http/1.1协议

3) 简单而且强有力的基于文件的配置(httpd.conf).

4) 支持通用网关接口(cgi)

5) 支持虚拟主机.

6) 支持http认证.

7) 集成perl.

8) 集成的代理服务器

9) 可以通过web浏览器监视服务器的状态可以自定义日志.

10) 支持服务器端包含命令(ssi).

11) 支持安全socket(ssl).

12) 具有用户会话过程的跟踪能力.

13) 支持fastcgi

14) 支持java servlets

3.nginx

Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器.Nginx是由俄罗斯人 Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发.

Nginx以事件驱动的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理、负载平衡。其拥有匹配Lighttpd的性能,同时还没有Lighttpd的内存泄漏问题,而且Lighttpdmod_proxy也有一些问题并且很久没有更新。但是Nginx并不支持cgi方式运行,原因是可以减少因此带来的一些程序上的漏洞。所以必须使用FastCGI方式来执行PHP程序。

nginx做为HTTP服务器,有以下几项基本特性:

处理静态文件,索引文件以及自动索引;打开文件描述符缓冲.

无缓存的反向代理加速,简单的负载均衡和容错.

FastCGI,简单的负载均衡和容错.

模块化的结构。包括gzipping, byteranges, chunked responses,以及 SSI-filterfilter。如果由FastCGI或其它代理服务器处理单页中存在的多个SSI,则这项处理可以并行运行,而不需要相互等待。

Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率。它支持内核Poll模型,能经受高负载的考验,有报告表明能支持高达 50,000个并发连接数。

Nginx具有很高的稳定性。其它HTTP服务器,当遇到访问的峰值,或者有人恶意发起慢速连接时,也很可能会导致服务器物理内存耗尽频繁交换,失去响应,只能重启服务器。例如当前apache一旦上到200个以上进程,web响应速度就明显非常缓慢了。而Nginx采取了分阶段资源分配技术,使得它的CPU与内存占用率非常低。nginx官方表示保持10,000个没有活动的连接,它只占2.5M内存,所以类似DOS这样的攻击对nginx来说基本上是毫无用处的。就稳定性而言,nginxlighthttpd更胜一筹。

Nginx支持热部署。它的启动特别容易并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在不间断服务的情况下,对软件版本进行进行升级。

.3WEB服务器的比较:

server

Apache

Nginx

Lighttpd

Proxy代理

非常好

非常好

一般

Rewriter

非常好

一般

Fcgi

不好

非常好

热部署

不支持

支持

不支持

系统压力比较

很大

很小

比较小

稳定性

非常好

不好

安全性

一般

一般

技术支持

非常好

很少

一般

静态文件处理

一般

非常好

Vhosts虚拟主机

支持

不支持

支持

反向代理

一般

非常好

一般

Session sticky

支持

不支持

不支持

注:在相对比较大的网站,节约下来的服务器成本无疑是客观的。而有些小型网站往往服务器不多,如果采用Apache 这类传统 Web 服务器,似乎也还能撑过去。但有其很明显的弊端: Apache 在处理流量爆发的时候(比如爬虫或者是 Digg 效应很容易过载,这样的情况下采用 Nginx 最为合适。

建议方案:

Apache 后台服务器(主要处理php及一些功能请求如:中文url

Nginx 前端服务器(利用它占用系统资源少得优势来处理静态页面大量请求)

Lighttpd 图片服务器

总体来说,随着nginx功能得完善将使他成为今后web server得主流。

java – Mysql没有与JNDI Tomcat 6重新连接

java – Mysql没有与JNDI Tomcat 6重新连接

我正在使用JNDI和Tomcat6来管理MysqL连接,我的Catalina / domain.com / ROOT.xml有:
<Resource name="jdbc/db" auth="Container" type="javax.sql.DataSource"
   username="db1" password="somepass" driverClassName="com.MysqL.jdbc.Driver"             
   url="jdbc:MysqL://localhost:3306/db?autoReconnect=true" maxActive="15" maxIdle="3"  
   maxWait="5000" removeAbandoned="true" removeAbandonedTimeout="20" />

我虽然autoReconnect将重新连接到数据库,但它没有,在大约8小时不活动后,我的应用程序吐出丢失的数据库错误连接.有任何想法吗?

谢谢,Fedor

解决方法

不要使用autoReconnect.它和 it’s been deprecated有问题.例如,当线程使用连接时,您可能会发生断开连接/重新连接事件.在将它们传递给应用程序之前,我会将测试连接与testOnBorrow连接起来.这是一个例子:
<Resource name="jdbc/db"
          auth="Container"
          type="javax.sql.DataSource"
          username="db1"
          password="somepass"
          driverClassName="com.MysqL.jdbc.Driver"
          url="jdbc:MysqL://localhost:3306/db"
          maxActive="15"
          maxIdle="3"
          maxWait="5000"
          removeAbandoned="true"
          removeAbandonedTimeout="20"
          logAbandoned="true"
          factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
          validationQuery="select 1"
          minevictableIdleTimeMillis="3600000"
          timeBetweenevictionRunsMillis="1800000"
          numTestsPerevictionRun="10"
          testWhileIdle="true"
          testOnBorrow="true"
          testOnReturn="false"
          />

关于JNDI路径Tomcat与Jbosstomcat jdk路径的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于200. Spring Boot JNDI:在Tomcat中怎么玩JNDI?、Angular 自动编译部署 Tomcat Jboss、Apache/Tomcat/JBOSS/Nginx区别、java – Mysql没有与JNDI Tomcat 6重新连接的相关信息,请在本站寻找。

本文标签: