我的应用程序Gson 2.2
用于转换POJOs
为JSON
.当我进行负载测试时,我偶然发现Gson
构造函数中阻塞了很多线程:
"http-apr-28201-exec-28" #370 daemon prio=5 os_prio=0 tid=0x0000000001ee7800 nid=0x62cb waiting for monitor entry [0x00007fe64df9a000]
java.lang.Thread.State: BLOCKED (on object monitor)
at com.google.gson.Gson.<init>(Gson.java:200)
at com.google.gson.Gson.<init>(Gson.java:179)
Run Code Online (Sandbox Code Playgroud)
线程转储不显示任何线程持有[0x00007fe64df9a000] monitor
.
我怎样才能知道谁拥有它?
Gson
第200行的代码看起来很无辜:
// built-in type adapters that cannot be overridden
factories.add(TypeAdapters.STRING_FACTORY);
factories.add(TypeAdapters.INTEGER_FACTORY);
Run Code Online (Sandbox Code Playgroud)
我使用JRE 1.8.0_91
上Linux
我正在使用Logback,并且在记录用户参数时需要避免CRLF(回车和换行)。
我试图在静态地图PatternLayout.defaultConverterMap上添加扩展了ClassicConverter的类,但是没有用。
谢谢,
我正在使用JPA,通过EclipseLink.在我的单元测试中,我想测试在操作期间执行了多少SQL查询.这样,如果稍后的修改导致查询计数爆炸(例如,如果触发延迟加载),则单元测试将其标记为可能需要优化.
我正在寻找正确的API来做到这一点.纯JPA解决方案是理想的,但我可以在单元测试中使用特定于EclipseLink的API.我查看了EclipseLink分析器,但它似乎没有给我一种方法来计算SQL查询的数量.
在此先感谢您的帮助!
考虑使用创建的两个相同类型的bean进行以下配置:
@Configuration
@ComponentScan(basePackageClasses = TwoStrings.class)
public class Config {
@Bean
public String one() {
return "one";
}
@Bean
public String two() {
return "two";
}
}
Run Code Online (Sandbox Code Playgroud)
依赖于上面两个bean的另一个bean是由组件扫描创建的:
@Component
public class TwoStrings {
public final String a;
public final String b;
@Autowired
public TwoStrings(String one, String two) {
this.a = one;
this.b = two;
}
}
Run Code Online (Sandbox Code Playgroud)
编译期间局部变量/参数的名称将丢失,并且在运行时不可用:
但是,Spring以某种方式String
正确地自动连接两个bean.下面的示例测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = Config.class )
public class Example {
@Autowired
private TwoStrings twoStrings;
@Test
public void test() {
System.out.println(twoStrings.a);
System.out.println(twoStrings.b);
} …
Run Code Online (Sandbox Code Playgroud) java ×3
eclipselink ×1
gson ×1
jpa ×1
linefeed ×1
log-forging ×1
logback ×1
reflection ×1
security ×1
sniffy ×1
spring ×1
sql ×1
thread-dump ×1