我正在尝试在应用程序首次启动时进行一些数据库清理。 首先,我按如下方式定义了我的JNDI连接:
@Bean
public TomcatEmbeddedServletContainerFactory tomcatFactory() {
return new TomcatEmbeddedServletContainerFactory() {
@Override
protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer(
Tomcat tomcat) {
tomcat.enableNaming();
return super.getTomcatEmbeddedServletContainer(tomcat);
}
@Override
protected void postProcessContext(Context context) {
ContextResource resource = new ContextResource();
resource.setName("jdbc/myDataSource");
resource.setType(DataSource.class.getName());
resource.setProperty("driverClassName", "your.db.Driver");
resource.setProperty("url", "jdbc:yourDb");
context.getNamingResources().addResource(resource);
}
};
}
然后我希望在ApplicationListener ContextRefreshedEvent中检索资源,ApplicationListener实现如下:
@Component
public class StartupConfiguration implements ApplicationListener<ContextRefreshedEvent>
{
@Override
public void onApplicationEvent(ContextRefreshedEvent event)
{
ApplicationContext ctx = event.getApplicationContext();
Context initialContext = new InitialContext();
DataSource datasource = (DataSource) initialContext.lookup("java:comp/env/jdbc/myDataSource");
...
}
}
问题是它无法找到java:comp / env / jdbc / myDataSource,我已经使用各种事件进行了测试,而且这个工作的唯一事件是RequestHandledEvent
,我不认为它一个很好的解决方案。
答案 0 :(得分:1)
我在下面的堆栈溢出问题中找到了答案 stackoverflow.com/questions/27822619
我会引用安迪威尔金森的话
Tomcat使用线程的上下文类加载器来确定要执行查找的JNDI上下文。如果线程上下文类加载器不是Web应用程序类加载器,则JNDI上下文为空,因此查找失败。
Andy Wilkinson提出的建议
var zoom = d3.behavior.zoom()
.on("zoom", zoomed);
...
function initAxes(data) {
var xAxisExtent = d3.extent(data, function(d) {
return +d.date;
});
xAxisScale.domain([new Date(xAxisExtent[0]), new Date(xAxisExtent[1])]);
yAxisScale.domain([0, d3.max(data, function(d) {
return d.pval;
})]);
zoom.x(xAxisScale);
zoom.y(yAxisScale);
drawAxes();
}
...
function redrawBars() {
chart.selectAll(".data_bar")
.attr("transform", function(d) {
return "translate("+(xAxisScale(d.date) + margin.left)+"," + yAxisScale(d.pval) + ")";
})
.attr("height", function(d) {
return (height - yAxisScale(d.pval));
});
}