小编FBB*_*FBB的帖子

Maven Failsafe插件:如何使用集成前和集成后测试阶段

我不完全清楚如何最好地使用Maven Failsafe插件进行集成测试.我的用例是针对本地MySQL数据库测试SQL查询.

我知道数据库应该在pre-integration-test阶段期间启动,并在关闭期间关闭post-integration-test.但是我该如何指定呢?我应该在我的pom.xml中放一个命令行吗?或者我应该使用特定注释进行注释的方法?

java integration-testing maven maven-failsafe-plugin

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

另外运行两个线程的最佳方式?

更新:请参阅此问题的底部以获得完整答案.

我想运行一个辅助线程,以便我的主线程和我的辅助线程交替执行操作(不,我不想在主线程中执行所有操作,它用于单元测试).

我提出了两个不同的解决方案,我不知道哪个是最好的,我对第一个问题有疑问:

使用Exchanger

我使用ExchangeR做了一些事情(虽然我不想只交换一个对象).

@Test
public void launchMyTest() {
    /**
     * An anonymous class to set some variables from a different thread
     */
    class ThreadTest extends Thread {
        //declare some various attributes that will be set
        //NOT DECLARED VOLATILE
        ...

        public final Exchanger<Integer> exchanger = new Exchanger<Integer>();

        @Override
        public void run() {
            try {
                //start of the synchronization 
                int turn = 1;
                while (turn != 2) {
                    turn = this.exchanger.exchange(turn);
                }

                //do some work and set my …
Run Code Online (Sandbox Code Playgroud)

java concurrency

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

内存屏障和java.util.concurrent.locks.Condition示例

我有一个关于使用a Condition提供的内存障碍的问题Lock.

关于javadoc中Condition提供的示例,我对使用以下内容有疑问:

int putptr, takeptr, count;
Run Code Online (Sandbox Code Playgroud)

这些属性不应声明为volatile吗?正如我从示例中理解的那样,线程可能看不到例如的修改count.

或者是,在signal()调用时,自获取锁定以来所做的所有修改都对其他线程可见?就像synchronized块中的一些代码一样?

如果是,signal()调用时是否可见,或者在unlock()锁定时调用何时?

谢谢.

编辑:我在javadoc中看到Lock:

所有Lock实现必须强制执行与内置监视器锁提供的内存同步语义相同的内存同步语义,如Java™语言规范的第17.4节所述:

  • 成功的锁定操作具有与成功锁定操作相同的内存同步效果.
  • 成功解锁操作具有与成功解锁操作相同的内存同步效果.

不成功的锁定和解锁操作以及重入锁定/解锁操作不需要任何内存同步效果.

它们的意思是:"成功的锁定操作具有与进入synchronized块相同的内存同步效果","成功的解锁操作具有与退出synchronized块相同的内存同步效果"?

java concurrency

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

应用程序的哪个DataSource在独立和webapp上下文(Java 7,Tomcat 7)中都使用了?

我构建了一个具有独立"核心"层的应用程序,该层也用于构建webapp(它是一个Maven多模块项目,具有'核心'模块和'webapp'模块,具有依赖性'核心'模块).它使用MySQL数据库.我尝试DataSource在两个上下文中实现一个很好的(在独立上下文中只有一个连接就足够了).

在阅读了很多关于DataSources的文档之后,我不得不说我有点迷失了.我得出结论,也许我应该使用Tomcat JDBC连接池.我的问题是:

1)在独立上下文中,我应该如何提供使用DataSource的配置,知道这个配置将由Tomcat在webapp上下文中提供(独立配置应该不会覆盖Tomcat配置)?

  • 我是否应该在仅在独立上下文中调用的方法中执行此问题中的其他问题?但是我如何在webapp上下文中看到Tomcat已经提供了DataSource?

  • 或者我应该使用bean定义吗?但是如何在webapp上下文中使用这个bean呢?

2)其他池化DataSource实现怎么样?

结论:是的,我迷路了,我不知道DataSource使用的"黄金标准"是什么.谢谢您的帮助.

java jndi datasource desktop-application jdbc

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

排除一项特定单元测试的 Maven 依赖项

我想删除单元测试的依赖项。我在这个答案中找到了如何做到这一点。

但我想仅删除一个特定测试的依赖项,而不是所有测试的依赖项。有没有办法做到这一点?

java junit unit-testing maven

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

在哪些情况下 Stream 操作应该是有状态的?

在包的javaodoc 中stream,在本节的末尾Parallelism,我读到:

大多数流操作接受描述用户指定行为的参数,这些参数通常是 lambda 表达式。为了保持正确的行为,这些行为参数必须是无干扰的,并且在大多数情况下必须是无状态的。

我很难理解这个“在大多数情况下”。在哪些情况下可以接受/需要有状态的流操作?

我的意思是,我知道这是可能的,特别是在使用顺序流时,但同一个 javadoc 明确指出:

除了明确标识findAny()为非确定性的操作,例如,流是顺序执行还是并行执行不应改变计算结果。

并且:

另请注意,尝试从行为参数访问可变状态会给您带来安全和性能方面的错误选择;[...] 最好的方法是避免有状态的行为参数完全流式传输操作;通常有一种方法可以重构流管道以避免有状态。

所以,我的问题是:在哪种情况下使用有状态的流操作是一个好习惯(而不是用于副作用工作的方法,例如forEach)?

一个相关的问题可能是:为什么有副作用的操作,例如forEach?我总是最终做一个很好的旧for循环,以避免在我的 lambda 表达式中产生副作用。

java java-8 java-stream

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

Maven:生成整个项目的WAR,以及特定包的JAR

我使用模型 - 视图 - 控制器模式开发webapp.该model软件包代表了应用程序的核心API,可以独立使用.在controller与view包使用的model包装制作web应用程序.

问题: 我希望能够构建仅model包的JAR 和三个包的WAR.我想将这三个包保存在同一个项目中.与独立JAR相比,webapp WAR将包括补充库.我怎么能用Maven实现这个目标?是否有一个解决方案使用两个单独的pom.xml文件?(因为据我所知,你不能packaging在pom.xml中选择两个选项)

(我已经看到了这个问题,但我真的希望我的三个软件包成为同一个项目的一部分,并且属于同一个目录.)

此外,我的项目使用经典的webapp结构(这里简化):

my-app
-- pom.xml
-- src
----- main/
-------- java/
----------- model/
----------- view/
----------- controller/
-------- webapp/
---------- WEB-INF/
-------------classes/
Run Code Online (Sandbox Code Playgroud)

我可以设法在经典target/目录中生成JAR,在经典目录中生成webapp src/main/webapp/吗?(并且,根据要求,包括不同的图书馆)

谢谢你的帮助.

java maven

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