JavaSpark框架使用嵌入式Jetty作为Web服务器。Jetty支持HikariCP等工具的连池,并在XML文件中提供配置选项。然而,根据这些帖子,Spark确实允许配置Jetty。有很多使用Spark的例子,但是它们要么不使用数据库,要么使用DriverManager连接到数据库。
是否可以通过Spark中的datasource和JNDI配置连接池?如果是,怎么做?
应该是可能的,但您必须:
第1)点和第2)点可以简单到:
static final HikariDataSource datasource = new HikariDataSource(new HikariConfig());
不知道Sparkjava是否支持启动/停止事件。在那里我帮不了你。
或者,您可以尝试http://jooby.org(我是作者)使用jdbc模块:
{
use(new Jdbc());
get("/db", () -> {
DataSource ds = require(DataSource.class);
});
}
Jdbc模块为您提供了一个HikariDatasource,带有合理的默认选项,但同时您可以通过应用程序自定义池。conf
文件。
还有一些高级jdbc模块,如Hibernate、Ebean、jOOQ、Jdbi等。。。
我在SparkJava中配置了MariaDB的HikariCP池。我没有使用Jetty,而是使用Apache Tomcat。以下是一些代码片段:
src/main/resources/mysql连接。性质
dataSourceClassName=com.mysql.jdbc.jdbc2.optional.MysqlDataSource
dataSource.url=<url>
dataSource.user=<user>
dataSource.password=<password>
dataSource.cachePrepStmts=true
dataSource.prepStmtCacheSize=100
dataSource.prepStmtCacheSqlLimit=2048
dataSource.useServerPrepStmts=true
maximumPoolSize=10
com/example/app/DataSourceFactory。JAVA
public final class DataSourceFactory {
static final Logger LOG = LoggerFactory.getLogger(DataSourceFactory.class);
private static DataSource mySQLDataSource;
private DataSourceFactory() {
}
//returns javax.sql.DataSource
public static DataSource getMySQLDataSource() {
if (mySQLDataSource == null) {
synchronized (DataSourceFactory.class) {
if (mySQLDataSource == null) {
mySQLDataSource = getDataSource("mysql-connection.properties");
}
}
}
return mySQLDataSource;
}
// method to create the DataSource based on configuration
private static DataSource getDataSource(String configurationProperties) {
Properties conf = new Properties();
try {
conf.load(DataSourceFactory.class.getClassLoader().getResourceAsStream(configurationProperties));
} catch (IOException e) {
LOG.error("Can't locate database configuration", e);
}
HikariConfig config = new HikariConfig(conf);
HikariDataSource dataSource = new HikariDataSource(config);
LOG.info("DataSource[" + configurationProperties + "] created " + dataSource);
return dataSource;
}
}
WebContent/WEB-INF/WEB。xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<display-name>My Spark App</display-name>
<filter>
<filter-name>SparkFilter</filter-name>
<filter-class>spark.servlet.SparkFilter</filter-class>
<init-param>
<param-name>applicationClass</param-name>
<param-value>com.example.app.MySparkApp</param-value>
<!-- MySparkApp implements spark.servlet.SparkApplication -->
</init-param>
</filter>
<filter-mapping>
<filter-name>SparkFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>com.example.app.AppServletContextListener</listener-class>
</listener>
</web-app>
com/example/app/AppServletContextListener。JAVA
public class AppServletContextListener implements ServletContextListener {
static final Logger LOG = LoggerFactory.getLogger(AppServletContextListener.class);
@Override
public void contextInitialized(ServletContextEvent arg0) {
LOG.info("contextInitialized...");
}
@Override
public void contextDestroyed(ServletContextEvent arg0) {
LOG.info("contextDestroyed...");
try {
if (DataSourceFactory.getMySQLDataSource() != null) {
DataSourceFactory.getMySQLDataSource().unwrap(HikariDataSource.class).close();
}
} catch (SQLException e) {
LOG.error("Problem closing HikariCP pool", e);
}
}
}
最后,您可以通过调用DataSourceFactory.getMySQLDataSource(). getConnection()来获得池java.sql.连接
我试图在SparkJava中使用下面的etcd框架 https://github.com/AdoHe/etcd4j 代码如下所示: 但是当我尝试访问下面的url时http://localhost:4567/hello 我得到以下错误 我在这里遗漏了什么?etcd在作为独立项目使用main()函数时工作,但是不与SparkJava一起工作,是否有任何etcd客户端与SparkJava一起工作?
问题内容: 我们正在尝试借助Spring Framework实现Oracle连接池。我们正在使用DBCP连接池方法。但是,DBCP和spring之间的集成并不是很好。 我们面临的问题是,DBCP返回PoolableConnections对象,而Oracle期望使用OracleConnection对象。(引发ClassCastException) 看来此问题已在Oracle 11g中解决。但是,我对
这是今天回答另一个问题的“副作用”。这更多的是好奇心而不是实际问题。 JavaSE7提供了Oracle所称的“fork/join框架”。这可能是将工作安排到多个处理器的一种更好的方法。虽然我理解它应该如何工作,但我无法理解它的优势所在,以及关于偷工作的说法。 也许其他人更了解为什么这种方法是可取的(而不是因为它有一个奇特的名字)。 分支/连接的底层原语是s,即s,其想法是要么立即执行工作[原文如此
我试图创建一个接受入站连接的Tcp服务器,并异步地向连接的客户端发送消息。有一个Tcp服务器的示例,但它使用的是网关,是请求/响应,不支持异步。 null 异常org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常是org.springframework.messaging.messagehandlingException:无
我曾想过简单地对数据库运行一个小命令并捕获任何异常,然而,如果出现问题(例如app.config丢失或数据库服务器关闭),应用程序将花费大量时间运行此代码,然后抛出异常(大约1分钟)。我想这是由于连接超时等,但我已经摆弄了这样的属性没有任何作用。 有没有人能提供任何关于去哪里的建议?
问题内容: 我正在尝试将Objective-C框架与Swift编程语言一起用于iOS 8开发。这是导入的一个特定情况,但是一般的问题是: 您如何将Objective-C框架导入Swift并获得认可? 我正在尝试使用iOS 8和Xcode 6 Beta将Parse框架集成到快速应用程序中。 这是在Objective-C中进行Parse框架集成的技术: https://www.parse.com/ap