小编Tec*_*nch的帖子

如何在Spring Integration测试之间删除内存中的h2db?

我在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)

spring h2 spring-test spring-boot jhipster

5
推荐指数
2
解决办法
3182
查看次数

从实例方法写入静态字段

我的代码如下。我懂了

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)

java sonarqube

4
推荐指数
1
解决办法
1万
查看次数

在Chef中递归应用所有者/组

我在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)

ruby chef-infra

4
推荐指数
1
解决办法
6067
查看次数

Web应用程序中的Log4j2

如何使用简单的Java Web应用程序配置Log4j2?我在apache网站上浏览了该教程,但没有提供任何有关Web应用程序的简单示例。我在有记录器静态变量的独立应用程序中使用了它。但是在Servlet中,我认为我们不能有实例变量。我们应该在doPost内部使用静态变量吗?

另外,指向所有步骤的已配置log4j2 Web应用程序或教程的任何指针都将有所帮助,因为我找不到合适的向导。

我正在Tomcat 6.0服务器上运行。

java web-applications log4j2

3
推荐指数
1
解决办法
8123
查看次数

将Logit Retrofit记录到Logback Logger

我正在为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)

我想要所有这些都去记录器日志.

java logging logback slf4j retrofit

3
推荐指数
1
解决办法
518
查看次数

如何在java中实现实体的状态转换?

我的应用程序中有多个实体,如用户,帐户,许可证等.每个实体都有与之关联的状态,如Active,Ok,Suspended,Unverified,PendingPayment,PendingApproval等.我想确保实体可以从预定义状态移动对于另一个用户只能从Ok移动到Suspended但不能从Unverified移动到Suspended.实现这个的最佳设计模式是什么?我环顾四周,大多数时候都会找到状态机来解决这些问题,但它们看起来太复杂了,因为我不想考虑该州的事件.我想要限制的只是国家的过渡.

截至目前,我可以考虑使用预先填充的2D数组来定义每个维度中的所有状态并表示可能的转换.寻找更好的方法.

java state state-machine

3
推荐指数
1
解决办法
885
查看次数

如何防止logback/slf4j解析新的行字符

我正在使用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)

java logging logback slf4j

2
推荐指数
1
解决办法
4610
查看次数

不支持的major.minor版本51.0在pom中使用1.6而对于一个JUnit使用openjdk6时出错

我正在使用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)

java junit maven travis-ci

1
推荐指数
1
解决办法
6806
查看次数

首先执行ServletContextListener还是load-on-startup?

我在使用 servlet 的 init() 方法和启动时加载的旧应用程序中引入 ServletContextListener。我在侦听器中的记录器没有记录,因为初始化是在 servlet 的 init() 中进行的,并且显然它尚未初始化。从技术上讲,哪个首先初始化?ServletContextListener 还是 servlet init ?我可以安全地将记录器初始化移动到侦听器吗?

java tomcat servlets

1
推荐指数
1
解决办法
2362
查看次数

是否可以在CSS内容中使用两个图标,一个在另一个

我有一个如下所示的 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 来添加新类。

html css font-awesome

1
推荐指数
1
解决办法
5981
查看次数

樱桃挑选特定的提交作为单个提交

这是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)

git bash shell

0
推荐指数
1
解决办法
570
查看次数

Java变量未使用

我在下面写了一段代码.在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)

java

-1
推荐指数
1
解决办法
2621
查看次数