小编Seb*_*Seb的帖子

使用Spring和DBCP处理JDBC连接的正确方法是什么?

我正在使用Spring MVC在SQL Server数据库之上构建一个薄层.当我开始测试时,似乎它不能很好地处理压力:).我正在使用Apache Commons DBCP来处理连接池和数据源.

当我第一次尝试~10-15个同时连接时,它曾经挂起并且我必须重新启动服务器(对于dev我正在使用Tomcat,但我最终必须部署在Weblogic上).

这些是我的Spring bean定义:

<bean id="dataSource" destroy-method="close"
      class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
    <property name="url" value="[...]"/>
    <property name="username" value="[...]" />
    <property name="password" value="[...]" />
</bean>

<bean id="partnerDAO" class="com.hp.gpl.JdbcPartnerDAO">
    <constructor-arg ref="dataSource"/>
</bean>

<!-- + other beans -->
Run Code Online (Sandbox Code Playgroud)

这就是我使用它们的方式:

// in the DAO
public JdbcPartnerDAO(DataSource dataSource) {
    jdbcTemplate = new JdbcTemplate(dataSource);
}

// in the controller
@Autowired
private PartnerDAO partnerDAO;

// in the controller method
Collection<Partner> partners = partnerDAO.getPartners(...);
Run Code Online (Sandbox Code Playgroud)

周围一点点看完后,我发现maxWait,maxActivemaxIdle对性能的BasicDataSource(从 …

java spring dao connection-pooling jdbc

7
推荐指数
2
解决办法
3万
查看次数

有没有办法验证在使用 JUnit 时是否在测试方法中调用了 try/catch 指令的 Catch 部分?

例如,如果我有以下要测试的类:

public class SomeClass{
    public void someMethod() {
        try {
            //Some code, where comething could go wrong
        } catch (Exception err) {
            //Handling it amounts to logging the problem and trying to continue
        }
    }
 }
Run Code Online (Sandbox Code Playgroud)

如果我随后使用 JUnit 测试此方法,那么如果 try 子句中出现问题并且运行 catch 代码,则测试将通过。

我想这样做,以便在运行 catch 子句指令时测试将失败。

我确实想到了一些可以尝试编写测试的方法,以便获得等效的功能,但是对于每种方法,我都不想以这种方式进行处理。如果达到任何 catch 子句,则尝试使测试失败似乎是最干净的方法,如果这实际上是可能的

笔记:

我知道我可以验证代码的某些功能并检查它们是否是某个值/是否已经使用 Mockito 运行了多次。但是,我想要一个解决方案,如果对测试方法进行了更改,从根本上改变了它的工作方式(但不是本质上正在执行的任务),那么我将不必重写测试。

不幸的是,为了使这个问题更加困难,我无法对源代码进行任何修改。这个位置不在我的控制范围内,所以我必须在这些范围内工作。


编辑:

SomeClass 是我希望测试的类。它不是实际的 JUnit 测试。我已经编辑了我的原始问题以尝试澄清这一点。

java junit unit-testing mockito

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

如果其中一个是静态的,你可以用Mocktio/PowerMock模拟一系列方法调用吗?

想象一下,我在单元测试的代码中有以下行:

SomeClass.method1().method2();
Run Code Online (Sandbox Code Playgroud)

SomeClass是一个类,method1()是SomeClass中的一个静态方法,它返回一些例如'aClass'的实例,而method2()是一个可以从'aClass'实例调用的方法.

是否可以模拟整个链,以便我可以返回我想要的结果?目前我知道我可以做类似的事情:

BDDMockito.given(SomeClass.method1()).willReturn(mockedAClass);
when(mockedAClass.method2()).thenReturn(true);
Run Code Online (Sandbox Code Playgroud)

但我宁愿做这样的事情:

when(SomeClass.method1().method2()).thenReturn(true);
Run Code Online (Sandbox Code Playgroud)

这可能吗?


编辑:这个问题被标记为重复,但我的问题和'重复'之间存在一个相当大的差异.在我的问题中,第一种方法是静态的,第二种方法不是.我似乎无法让mockito链接模拟这种静态方法,这让我相信它不是同一个答案.

java unit-testing mockito powermock

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

您是否可以使用CASE语句来评估要传递到存储过程的参数?

我有一个存储过程,它有四个参数.我想在另一个脚本中调用它,但是当我这样做时,我还没有确切地知道我想要通过它.我正在尝试内联存储过程.所以我的行看起来像这样:

EXEC stored_procedure 
    @firstparam, 
    @secondparam, 
    CASE @thirdparam 
        WHEN null THEN 0 
        ELSE 1 
    END, 
    CASE @fourthparam 
        WHEN null THEN 0 
        ELSE 1 
    END
Run Code Online (Sandbox Code Playgroud)

但是我在以下部分附近得到了"错误语法"这个非常含糊的错误:

  • 第一个案例
  • 第一个
  • 首先,(在第一个CASE结束之后,在第二个CASE之前)
  • 第二个1

我只是想能够执行一个CASE语句,根据第三和第四个参数传递正确的变量.

sql stored-procedures sql-server-2008

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

如何确定在检索Excel文件时是否抛出Zip Bomb错误样式表是否合法?

当我尝试使用apache POIs XSSFReader获取Excel文件的样式表时,我有一段代码错误.涉及该文件的所有操作如下所示:

XSSFReader reader = new XSSFReader(OPCPackage.open(excelFile.getPath(), PackageAccess.READ));
StylesTable table = reader.getStylesTable();
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

引起:java.io.IOException:检测到Zip炸弹!该文件将超过某些限制,这通常表明该文件用于夸大内存使用量,因此可能带来安全风险.如果需要处理超出这些限制的文件,可以通过setMinInflateRatio()和setMaxEntrySize()调整这些限制.计数器:1644067,cis.counter:16384,比率:0.009965530601855033Limits:MIN_INFLATE_RATIO:0.01,MAX_ENTRY_SIZE:4294967295

我不知道如何判断这是否是误报(在Excel中打开文件似乎没问题),如果是这样,如何正确处理这个?

java security excel apache-poi

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