我在Spring Web应用程序中使用Liquibase.我有一堆实体,在用户,帐户,发票,许可证等每个实体的集成测试中都有数百个REST API测试.我的所有集成测试在按类运行时都会通过,但是当它们一起运行时很多都会失败gradle test.测试之间很可能存在数据冲突,我现在不想花时间修复清理数据.我更喜欢在每节课后放弃数据库和上下文.我想我可以@DirtiesContext在课堂上使用,所以我用它进行了测试注释.
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {Application.class, SecurityConfiguration.class},
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@DirtiesContext
public class InvoiceResourceIntTest {
Run Code Online (Sandbox Code Playgroud)
我看到在添加注释之后,Web应用程序上下文会针对每个类启动,但是当Liquibase初始化发生时,查询不会运行,因为校验和匹配.由于这是一个内存中的数据库,我期望数据库与spring上下文一起被销毁,但它没有发生.
我也设置了jpa hibernate ddl-auto,create-drop但这没有帮助.我正在考虑的下一个选项是,而不是mem将h2db写入文件,并在我的集成测试类文件的@BeforeClass中删除该文件.我更喜欢在内存中自动删除db而不是在测试中管理它,但是想在这里尝试作为最后一个选项.谢谢您的帮助.
更新:
我更新了测试如下.
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {Application.class, SecurityConfiguration.class},
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
properties = "spring.datasource.name=AccountResource")
@DirtiesContext
public class AccountResourceIntTest {
Run Code Online (Sandbox Code Playgroud)
我为每个集成测试设置了唯一的名称.我仍然没有看到数据库是新的,因为我只能在日志中看到Liquibase校验和.
这是app.yml的app配置
spring:
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:myApp;DB_CLOSE_DELAY=-1
name:
username:
password:
jpa:
database-platform: com.neustar.registry.le.domain.util.FixedH2Dialect
database: H2
open-in-view: false
show_sql: true
hibernate:
ddl-auto: create-drop
naming-strategy: org.springframework.boot.orm.jpa.hibernate.SpringNamingStrategy
properties:
hibernate.cache.use_second_level_cache: false
hibernate.cache.use_query_cache: false
hibernate.generate_statistics: true
hibernate.hbm2ddl.auto: …Run Code Online (Sandbox Code Playgroud) 我的代码如下。我懂了
public MyClass{
private static DataSource dataSource = null;
private static DataSource getDataSource(){
if (dataSource == null) {
try {
dataSource = // something.
} catch (Exception e) {
// some exception.
}
}
return dataSource;
}
public List doSomething(){
// ...
if(dataSource == null){
dataSource = getDataSource();
}
dataSource.getConnection();
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
我在声纳分析中看到以下消息。
Dodgy - Write to static field from instance method
This instance method writes to a static field. This is tricky to get correct if multiple …Run Code Online (Sandbox Code Playgroud) 我在Chef中有一段红宝石代码,以递归方式创建一些目录
# Deploy config files from files
unless instance[:directories].nil?
instance[:directories].each do |dir|
unless File.directory?("#{dir[:source_dir]}")
remote_directory "#{dir[:path]}" do
source "#{dir[:source_dir]}"
owner "#{config[:owner]}"
group "#{config[:group]}"
recursive true
notifies :run, "execute[change permissions]", :immediately
notifies :restart, "service[#{instance[:name]}]"
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
根据规范,remote_directory资源仅将所有者/组权限应用于指定路径中的叶节点,但不应用于创建的中间节点.
我计划在创建路径时通知执行命令并递归地应用权限.如何传递参数(在本例中为#{dir [:path]})以执行如下命令.
execute "change permissions" do
command "chown -R #{config[:owner]}:#{config[:group]} #{path}"
user "root"
action :nothing
end
Run Code Online (Sandbox Code Playgroud) 如何使用简单的Java Web应用程序配置Log4j2?我在apache网站上浏览了该教程,但没有提供任何有关Web应用程序的简单示例。我在有记录器静态变量的独立应用程序中使用了它。但是在Servlet中,我认为我们不能有实例变量。我们应该在doPost内部使用静态变量吗?
另外,指向所有步骤的已配置log4j2 Web应用程序或教程的任何指针都将有所帮助,因为我找不到合适的向导。
我正在Tomcat 6.0服务器上运行。
我正在为REST API开发一个JAVA客户端.我正在为客户使用Retrofit.我看到我可以在改造中创建适配器时设置日志级别.所有这些日志目前都进入控制台.但是,我想将其重定向到由已在应用程序中使用的logback生成的日志.我该怎么做呢 ?
RestAdapter restAdapter = new RestAdapter.Builder()
.setLogLevel(RestAdapter.LogLevel.FULL).setEndpoint(APP_URL)
.setRequestInterceptor(new AuthRequestInterceptor())
.setErrorHandler(new RetrofitErrorHandler()).build();
Run Code Online (Sandbox Code Playgroud)
产量
---> HTTP GET http://localhost:8080/services/v1/countries
Auth-Token: ...
---> END HTTP (no body)
<--- HTTP 200 http://localhost:8080/services/v1/countries (448ms)
Transfer-Encoding: chunked
: HTTP/1.1 200 OK
Vary: Accept-Encoding
Date: Thu, 04 Jun 2015 01:36:29 GMT
Content-Type: application/json
...
<--- END HTTP (9130-byte body)
Run Code Online (Sandbox Code Playgroud)
我想要所有这些都去记录器日志.
我的应用程序中有多个实体,如用户,帐户,许可证等.每个实体都有与之关联的状态,如Active,Ok,Suspended,Unverified,PendingPayment,PendingApproval等.我想确保实体可以从预定义状态移动对于另一个用户只能从Ok移动到Suspended但不能从Unverified移动到Suspended.实现这个的最佳设计模式是什么?我环顾四周,大多数时候都会找到状态机来解决这些问题,但它们看起来太复杂了,因为我不想考虑该州的事件.我想要限制的只是国家的过渡.
截至目前,我可以考虑使用预先填充的2D数组来定义每个维度中的所有状态并表示可能的转换.寻找更好的方法.
我正在使用SLF4j的logback来登录我的应用程序.我有一个包含新行字符的字符串.它是字符串值的一部分,但不表示新行.当我打印字符串时,logback将它打印在一个新行中.怎么预防这个?
码:
String str = "george\nmason"
logger.info(str);
Run Code Online (Sandbox Code Playgroud)
回归模式:
<pattern>[%d{dd MMM yyyy HH:mm:ss,SSS}] [%5p] [%X{sid}] [%-20C{0} %25M]:[%-4L] - %m%n</pattern>
Run Code Online (Sandbox Code Playgroud)
预期:
[19 Feb 2015 20:19:27] [ INFO] [] [myClass myMethod]:[52 ] - george\nmason
Run Code Online (Sandbox Code Playgroud)
实际产量:
[19 Feb 2015 20:19:27] [ INFO] [] [myClass myMethod]:[52 ] - george
mason
Run Code Online (Sandbox Code Playgroud) 我正在使用Travis CI来构建我的代码.我得到了不受支持的主要小错误.我知道当编译版本比执行版本更旧时会发生此错误.但我在我的pom文件中将编译版本设置为1.6,而Travis CI也使用openjdk6执行它.所以,我没有看到任何java版本的差异问题.我无法在pom中设置我的java路径,因为我在不同的服务器上使用它,即我的计算机,travis和heroku.所以它们可能不同,所以我不想在POM中设置它.您可以在https://travis-ci.org/santoshkt/cdetsd123上看到travis失败.任何指针都表示赞赏.此外,如果您看到下面aoltest.RegisterTest的内容已通过但aoltest.RegisterServiceTest失败.
Running aoltest.RegisterTest
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.03 sec
Running aoltest.RegisterServiceTest
Tests run: 2, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 0.025 sec <<< FAILURE!
testProcessRegistration1(aoltest.RegisterServiceTest) Time elapsed: 0.023 sec <<< ERROR!
java.lang.UnsupportedClassVersionError: javax/servlet/http/HttpServletRequest : Unsupported major.minor version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:643)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
at …Run Code Online (Sandbox Code Playgroud) 我在使用 servlet 的 init() 方法和启动时加载的旧应用程序中引入 ServletContextListener。我在侦听器中的记录器没有记录,因为初始化是在 servlet 的 init() 中进行的,并且显然它尚未初始化。从技术上讲,哪个首先初始化?ServletContextListener 还是 servlet init ?我可以安全地将记录器初始化移动到侦听器吗?
我有一个如下所示的 css 类
.fa-unsorted:before, .fa-sort:before {
content: '\e9c2';
margin-top: -10px;
color: #999999;
font-family: 'icomoon';
}
Run Code Online (Sandbox Code Playgroud)
显示如下
我想要的也包括在内,\e9c1但它应该显示在下面\e9c2。
对于上下文,我使用的库具有提到的 css 类来显示排序图标。它使用 fa-sort,它在同一图标中同时具有向上和向下箭头。
但我使用的 icomoon 没有这种替代品。所以我需要用两个图标来显示排序。以下是我想要的
我尝试关注内容,但正如预期的那样,箭头显示在彼此旁边。
content: '\e9c2\e9c1';
Run Code Online (Sandbox Code Playgroud)
添加另一个类会很好,但我无法控制 JS 来添加新类。
这是Git 樱桃选择包含关键字(跟踪 ID)的那些提交的后续问题
我想为代码审查创建一个孤立分支。这个孤立分支将从 SHA_of_first_commit~1 使用包含我的 trackingID 的提交消息创建。创建孤立分支后,我会挑选那些包含我的 trackingID 的消息的提交。问题是所有精选的提交都单独显示在孤儿分支中。我希望所有这些都被视为一次提交,以便我可以使用这个新的 SHA 审查代码。以下是我现在使用的脚本。
#!/bin/bash
if [ -z $1 ]; then
echo "Rationale: Cherry pick all commits in master, that match the tracking ID and create a new branch.";
echo "";
echo "Usage: $0 traackingID";
echo "";
exit 1;
fi
#If $1 doesn't match a AGW-<number> pattern, thrown an error
user="$(id -u -n)" > /dev/null
echo "You are - $user"
branchname=$user"_"$1"_review"
echo "Creating branch - $branchname"
basecommit="$(git log master --pretty=oneline …Run Code Online (Sandbox Code Playgroud) 我在下面写了一段代码.在eclipse中,它一直在阻止callPremiumTo不被使用.此外,当我测试我的应用程序时,我没有得到适当的价值.我无法弄清楚bug的位置.
Double callPremiumFrom = null;
Double callPremiumTo = null;
try {
callPremiumFrom = (Double) callPremiumFromComboBox.getSelectedItem();
}
catch ( Exception e ) {
// ignore
}
try {
callPremiumTo = (Double) callPremiumToComboBox.getSelectedItem();
}
catch ( Exception e ) {
// ignore
}
Run Code Online (Sandbox Code Playgroud)