小编Con*_*ger的帖子

如何使用Spring JDBCTemplate绑定元组列表?

我有一些像这样的问题:

List listOfIntegers = Arrays.asList(new Integer[] {1, 2, 3});
List objects = 
    namedParameterJdbcTemplate.query("select * from bla where id in ( :ids )",
            Collections.singletonMap("ids", listOfIntegers),
            myRowMapper);
Run Code Online (Sandbox Code Playgroud)

这会将此SQL查询发送到数据库:

select * from bla where id in ( 1, 2, 3 )
Run Code Online (Sandbox Code Playgroud)

现在我想将这种类型的查询发送到数据库:

select * from bla where (id,name) in ( (1,'foo'), (2,'bar'), (3,'foobar'))
Run Code Online (Sandbox Code Playgroud)

我是否需要传递List <List <Object >>才能完成此操作?它是否适用于Spring JDBCTemplate?

sql spring jdbc jdbctemplate

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

应用程序类中的@ComponentScan 中断@WebMvcTest 和@SpringBootTest

我正在创建带有@WebMvcTest注释的测试,发现如果我@ComponentScan在应用程序类中有注释,它将破坏测试的预期行为。

根据WebMvcTestjavadoc:

使用此批注将全面禁用自动配置,而是只适用于相关的测试MVC(即配置@Controller@ControllerAdvice@JsonComponent FilterWebMvcConfigurerHandlerMethodArgumentResolver咖啡豆,但没有@Component@Service@Repository豆类)“。

问题是@ComponentScan它正在实例化用@Service. 如果不是@ComponentScan我在@SpringBootApplication注释中指定扫描基础包,一切都按预期工作。

当我在@WebMvcTest注释中指定控制器类时会发生另一个问题。当@ComponentScan应用程序类中有注释时,它将加载所有控制器,而不是仅加载指定的控制器。

这是 Spring Boot 中的错误吗?

我想使用@ComponentScan是因为注释中excludeFilters没有的属性@SpringBootApplication

我发现的一种解决方法是创建一个带有@Configuration注释的单独类并将其移动到@ComponentScan那里。

spring-boot spring-boot-test

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

如何在Spring Boot中创建RabbitTemplate的多个实例?

我有一个当前用于SimpleMessageConverter向多个系统发送消息的系统。

现在我想开始使用Jackson2JsonMessageConverter其中一个系统。

这是为了解释为什么我想创建多个RabbitTemplate.

我还希望能够继续使用 提供的所有配置选项RabbitAutoConfiguration,例如,如果我指定一个属性,spring.rabbitmq.connectionTimeout我希望它影响RabbitTemplate将创建的所有实例。

是否可以延长RabbitAutoConfiguration这样做?

java spring-rabbit spring-boot

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

为什么 Oracle 的 PoolDataSource 会忽略 connectionProperties 值?

在我的 Tomcat 的 contex.xml 文件中,我有这个数据源声明:

<Resource name="jdbc/my_ds" auth="Container" factory="oracle.ucp.jdbc.PoolDataSourceImpl" 
          type="oracle.ucp.jdbc.PoolDataSource" description="UCP Pool in Tomcat" 
          connectionFactoryClassName="oracle.jdbc.pool.OracleDataSource" minPoolSize="1" maxPoolSize="10" 
          initialPoolSize="2" inactiveConnectionTimeout="20" setMaxIdleTime="1800" 
          user="my_user" password="my_password" 
          url="jdbc:oracle:thin:@mydb.com:1234:DATABASEID" connectionPoolName="MY_UCPPool" 
          connectionProperties="defaultBatchValue=7000,defaultRowPrefetch=7000" validateConnectionOnBorrow="true"/>
Run Code Online (Sandbox Code Playgroud)

但是在我的 DAO 代码中,当我检查提取大小时,它没有按预期返回 7000:

if (s.getFetchSize() < 100) {
   log.warn("fetch size is too small: " + s.getFetchSize());
}
Run Code Online (Sandbox Code Playgroud)

java oracle tomcat jdbc

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