我有2个罐子,我们称之为a.jar和b.jar.
b.jar取决于a.jar.
在a.jar中,我定义了一个类,我们称之为StaticClass.在StaticClass中,我定义了一个静态块,调用名为"init"的方法:
public class StaticClass {
static {
init();
}
public void static init () {
// do some initialization here
}
}
Run Code Online (Sandbox Code Playgroud)
在b.jar中,我有一个main,所以在main中,我希望已经调用了init()方法,但实际上并没有.我怀疑是因为静态类没有被jvm加载,任何人都可以告诉我
谢谢
我使用的是Spring 3.2.9,Tomcat 6.0.44
我正在尝试配置我的应用程序的Spring检测提供程序(例如spring-instrumentation.jar)进行加载时编织,当它部署在Tomcat上时.
我要求不要在命令行上使用"-javaagent:/path/path/spring-instrument.jar"来进行配置.
我已经读过,我可以通过修改应用程序的Tomcat配置的<Context>元素来配置Spring检测(在Tomcat的server.xml或我的web应用程序的context.xml中).将适当的<Context>元素添加到server.xml会导致我的应用程序正确配置为与Spring的检测提供程序一起运行.将它添加到context.xml(见下文)不会导致工作设置.
我有一个META-INF/aop.xml文件,如下所示:
<aspectj>
<weaver options="-verbose -showWeaveInfo -debug">
<include within="com.mv.xx.services..*"/>
<exclude within="com.mv.xx.aop..*"/>
</weaver>
<aspects>
<aspect name="com.mv.xx.aop.MyAspect"/>
</aspects>
</aspectj>
Run Code Online (Sandbox Code Playgroud)
我还指定我想通过将其添加到我的Spring上下文配置来使用加载时编织:
<context:load-time-weaver />
Run Code Online (Sandbox Code Playgroud)
我将这个jar添加到我的应用程序的类路径:spring-instrument-tomcat.jar
我做了什么:
启动Tomcat时,如果我使用-javaagent参数在命令行上识别spring-instrument.jar的位置,如下所示:
-javaagent:/path/path2/spring-instrument-3.2.9.RELEASE.jar
Run Code Online (Sandbox Code Playgroud)
一切正常.
接下来,我从命令行中删除了"-javaagent:/path/path2/spring-instrument-3.2.9.RELEASE.jar".在Tomcat的server.xml文件(位于$ CATALINE_HOME/conf中)中,我向<Host>元素添加了一个<Context>元素,如下所示:
<Context path="/myApp" docBase="myApp">
<Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/>
</Context>
Run Code Online (Sandbox Code Playgroud)
使用此配置,一切都正常.但是我要求不修改Tomcat的server.xml,因为我无法控制server.xml(DevOps会这样做,并且不愿修改它).
接下来,我从Tomcat的server.xml中删除了<Context>元素.根据Spring文档,我可以在我的webapp中添加/META-INF/context.xml,并将以前在Tomcat的server.xml中的<Context>元素放入context.xml中,如下所示:
<Context>
<Context path="/myApp" docBase="myApp">
<Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/>
</Context>
</Context>
Run Code Online (Sandbox Code Playgroud)
但是,当我重新启动Tomcat时,我在日志中收到一条错误消息:
SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.context.weaving.AspectJWeavingEnabler#0': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating …Run Code Online (Sandbox Code Playgroud) 我有两个看起来像这样的函数:
primaryImageLoaded () {
this.setState({primaryImageLoaded: true})
}
secondaryImageLoaded () {
this.setState({ secondaryImageLoaded: true })
}
Run Code Online (Sandbox Code Playgroud)
它们被称为这样(使用反应):
onLoad={this.secondaryImageLoaded.bind(this)
Run Code Online (Sandbox Code Playgroud)
这感觉过度,我想只有一个函数,并将状态变量作为参数传递,但我怎么能传递一个额外的参数.bind?是否可以在我传递给的对象中使用变量作为键setState?
下面是一个简单的java程序.它有一个名为"cnt"的计数器,它会递增,然后添加到名为"monitor"的List中."cnt"由多个线程递增,并且值被多个线程添加到"监视器".
在方法"go()"的末尾,cnt和monitor.size()应该具有相同的值,但它们不具有相同的值.monitor.size()确实有正确的值.
如果通过取消注释其中一个已注释的同步块来更改代码,并注释掉当前未注释的块,则代码会生成预期结果.此外,如果将线程计数(THREAD_COUNT)设置为1,则代码会生成预期结果.
这只能在具有多个真实核心的计算机上重现.
public class ThreadTester {
private List<Integer> monitor = new ArrayList<Integer>();
private Integer cnt = 0;
private static final int NUM_EVENTS = 2313;
private final int THREAD_COUNT = 13;
public ThreadTester() {
}
public void go() {
Runnable r = new Runnable() {
@Override
public void run() {
for (int ii=0; ii<NUM_EVENTS; ++ii) {
synchronized( monitor) {
synchronized(cnt) { // <-- is this synchronized necessary?
monitor.add(cnt);
}
// synchronized(cnt) {
// cnt++; // <-- why does moving …Run Code Online (Sandbox Code Playgroud) java concurrency multithreading synchronized synchronized-block
我正在尝试实现OAuth安全性并遇到一个问题,对我来说配置类不够清晰.
实施时AuthorizationServerConfigurer我有三个配置器:
ClientDetailsServiceConfigurer用于提供如何以及从何处获取客户详细信息的方式.例如,它可以是从数据库提供注册客户端的服务.说到了 AuthorizationServerSecurityConfigurer,AuthorizationServerEndpointsConfigurer我不确定他们做了什么或者应该如何配置.在文档中它只说:
AuthorizationServerEndpointsConfigurer:定义授权和令牌端点以及令牌服务.
也许有人可以用简单的词语解释这两个配置器做了什么,或者它们用于什么.
java spring spring-security oauth-2.0 spring-security-oauth2
我有一个联合查询,我想在联合查询“左侧”的 select 语句中使用联合查询“右侧”的 select 的结果。下面的查询工作正常(至少在 postgres 上),但我运行 query1 两次,一次作为 query1,再次作为 SameAsQuery1。
select x as zz from (select 69 as x) as query1
union all
select count(zz) as zz from
(select x as zz from (select 69 as x) as sameAsQuery1) as query2
Run Code Online (Sandbox Code Playgroud)
我想做这样的事情,这样我就不必运行 query1 两次,但它不起作用:
select x as zz from (select 69 as x) as query1
union all
select count(zz) as zz from query1
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息:
错误:关系“query1”不存在第 3 行:从 query1 选择 count(zz) 作为 zz
有没有办法重写这个查询,使 query1 只运行一次?
对 Llama 先生的回复进行小修改效果很好,看起来像这样(注意添加“as q2”): …
java ×3
spring ×2
concurrency ×1
context.xml ×1
javascript ×1
oauth-2.0 ×1
postgresql ×1
reactjs ×1
spring-aop ×1
sql ×1
subquery ×1
synchronized ×1
tomcat ×1
union ×1