我想知道是否有人可以建议:我有一个场景,由Quartz运行的预定作业将每小时更新一个对象的arraylist.
但我需要这些对象的arraylist对Tomcat创建的所有会话都是可见的.所以我想的是我每隔一小时从运行的Quartz作业中的某个地方写这个对象,这样每个会话都可以访问它.
任何人都可以说这可能会达到最佳效果吗?我想知道从Quartz作业写入servlet上下文的对象?另一种方法是让每个会话从数据库表中填充对象的arraylist.
谢谢
摩根先生.
我目前正在学习更多关于在Spring Boot webapp中实现JDBC和使用数据库的知识,我在帖子的底部遇到了以下Stack Trace.
我创建了一个简单的Employee模型,我试图在我的main()所在的同一个类上执行一些数据库代码.模型和主类是整个项目中存在的唯一两个java文件.我正在尝试实现以下run()代码,该代码覆盖了接口CommandLineRunner中的那个,但是我没有得到log.info之后的日志("A部分:"):
log.info("Part A:")
employees.forEach(employee -> {log.info(employee.toString());
log.info("part a");});
Run Code Online (Sandbox Code Playgroud)
- 我注意到了:
我注意到堆栈跟踪开始之前的日志的最后一行来自:"Thread-1"而不是"main".我认为这意味着来自除main之外的某个地方的线程在正常关闭之前遇到错误和关闭连接.
另外,我认为因为HikariPool在"peer's close_notify"之前关闭,我认为它指的是HikariPool的正常关闭,我无法看到我一直试图获取的最后一点日志记录.我希望看到的最后一点日志记录是已插入到我的数据库中的员工的日志记录.
我希望看到的最后一点日志记录应该从这行代码中获得:
employees.forEach(employee -> {log.info(employee.toString());
log.info("part a");});
Run Code Online (Sandbox Code Playgroud)
- 要注意的事项:
由于日志中的这一行,我以为我会看到员工插入到我的数据库中,但当我直接在MySQL命令行客户端上查询时,它返回一个空集:
2018-11-03 21:08:35.362 INFO 2408 --- [ main] c.j.jdbctest1.JdbcTest1Application : rows affected: 1
Run Code Online (Sandbox Code Playgroud)
我不明白为什么在没有任何内容插入数据库时,行会受到影响.
堆栈跟踪和日志:(下面粘贴的堆栈跟踪实际上会重复几次,但我为了简洁而将其剪掉了.)
2018-11-03 21:08:32.997 INFO 2408 --- [ main] c.j.jdbctest1.JdbcTest1Application : Starting JdbcTest1Application on KitKat with PID 2408 (C:\Users\Nano\Downloads\jdbc-test1\jdbc-test1\target\classes started by Nano in C:\Users\Nano\Downloads\jdbc-test1\jdbc-test1)
2018-11-03 21:08:33.003 INFO 2408 --- [ main] c.j.jdbctest1.JdbcTest1Application : No …Run Code Online (Sandbox Code Playgroud) 我正在尝试为本地开发部署一个战争文件,我想修改 tomcat 的 context.xml 以通过 jndi 提供数据源。这在使用时有效tomcat7-maven-plugin:
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<contextFile>../../tomcat-test-context.xml</contextFile>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
问题是,tomcat7-maven-plugin 不适用于我在项目中使用的叠加层,所以我必须使用另一种方法。我可以在 intellij idea 中部署战争工件,但我没有看到任何选项可以像在 tomcat7-maven-plugin 中那样指定 contextFile。在intellij idea tomcat配置中是否有一些选项可以做类似的事情?
当然我可以修改context.xmlcatalina home下的,但是我希望每个项目都配置它,不想有很多tomcat。
该应用程序部署在生产中的 weblogic 上,我仅在本地使用 tomcat 进行测试。
我一直在学习连接池,并且通过使用 Tomcat 的 PoolProperties获得了一个工作。现在我想使用带有 Tomcat 和 IntelliJ 的 context.xml 文件来设置一个,但我无法让它工作。这是怎么做的?
4.0 Web Application 框架的新项目可以自动创建带有 web.xml 文件的 web/WEB-INF 目录,但是没有创建包含 context.xml 文件的 web/META-INF 目录。如果我自己通过工具窗口> 项目创建 web/META-INF/context.xml,并使用它来设置连接池,如下所示,该文件似乎被忽略。
这是我对可能发生的事情的猜测,尽管我确信这充满了错误:WAR 文件是一个打包目录,它以 Tomcat 理解的安排发送到 Tomcat。web/WEB-INF/web.xml 是一个必需的文件,出于多种原因需要它,其中之一是设置 servlet。web/META-INF/context.xml 是可选的,因此默认情况下,IntelliJ 不会创建它。当手动创建 web/META-INF/context.xml 时,它也必须包含在 WAR 文件中,否则 IntelliJ 不会将其发送到 Tomcat。
即使上一段是正确的,在尝试将它添加到 WAR 之后,我仍然没有让 Tomcat 使用 context.xml。也许我没有正确添加它。
<?xml version="1.0" encoding="UTF-8" ?>
<Context>
<Resource name="jdbc/sql_connection_03" auth="Container"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/follow_db_01"
username="root" password="pass"
maxactive="100" maxIdle="30" maxWait="10000"
logAbandoned="true" removeAbandoned="true"
removeAbandonedTimeout="60" type="java.sql.DataSource"/>
</Context>
Run Code Online (Sandbox Code Playgroud)
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%@ page …Run Code Online (Sandbox Code Playgroud) java ×2
context.xml ×1
jdbctemplate ×1
mysql ×1
servlets ×1
spring-boot ×1
spring-jdbc ×1
sslexception ×1
tomcat ×1
tomcat7 ×1