如何在Spring Data JPA的@Query注解中使用配置文件属性值?
在@Query注解中使用配置属性值的实现方法
当然可以实现,直接通过Spring的SpEL表达式就能在@Query注解里引用application.properties中的配置值,具体步骤如下:
- 先在
application.properties中添加存储过程名的配置:
sp.name=your_target_sp_name
- 修改Repository接口的@Query注解,用SpEL表达式读取配置:
@Repository public interface SomeRep extends CrudRepository<MyClass, Long> { @Transactional @Query(value = "{call #{@environment.getProperty('sp.name')}(:param1, :param2, :param3, :param4)}", nativeQuery = true) List spErrorCall(String param1, String param2, Integer param3, Integer param4); }
关键说明
这里的#{@environment.getProperty('sp.name')}是核心:
@environment是Spring上下文内置的Environment实例,专门用于读取配置属性- 整个SpEL表达式会在运行时被解析替换成配置文件中对应的存储过程名
补充方案(可选)
如果需要更灵活的管理,也可以先定义一个配置类注入属性,再通过SpEL引用:
@Component public class SpConfig { @Value("${sp.name}") private String spName; public String getSpName() { return spName; } }
然后在@Query中引用这个bean的属性:
@Query(value = "{call #{@spConfig.getSpName()}(:param1, :param2, :param3, :param4)}", nativeQuery = true)
内容的提问来源于stack exchange,提问作者Imam Sam
相关产品推荐
相关产品推荐

