我建立了Spring Boot
服务,并拥有BookService
以及将近15个不同的@Value
字段。它们都是常量,可以在其他地方共享给应用程序。其中一些与Amazon访问有关,另一些与Redis
键有关。
是否有任何方法可以减少application.properties
中消耗的值量?有这样的事情是正常的行业惯例吗?我可以使用其他方法吗?
BookService.java
代码段:
@Service
public class BookService {
@Autowired
private StringRedisTemplate redisTemplate;
@Value("${redis.orders.timestampKey}")
private String redisOrdersTimestampKey;
@Value("${redis.orders.retrunsKey}")
private String redisOrdersReturnsKey;
@Value("${redis.orders.quantityKey}")
private String redisOrdersQuantityKey;
...
}
我主要担心的是,我建立的设计与业界最佳实践相去甚远,并且将来可能很难实现。
答案 0 :(得分:3)
只需使用某种弹簧的ConfigurationProperties
。 Here您可以找到更多。
这应该对您有用:
@ConfigurationProperties(prefix = "redis")
public class RedisProperties {
@NestedConfigurationProperty
private Order orders;
// ..getters and setters
public static class Order{
private String timestampKey;
private String retrunsKey;
private String quantityKey;
// ..getters and setters
}
}
然后将此依赖项添加到您的pom
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
并创建如下配置:
@Configuration
@EnableConfigurationProperties(RedisProperties.class)
public class SomeConfiguration {
}
然后,您可以像使用标准Spring bean一样使用RedisProperties
并将其注入所需的位置。
答案 1 :(得分:2)
查看文档:{{3}}
您将创建一个属性类,并在您的服务中将其自动连接。您还可以验证您的属性。您的班级可能如下所示(注意:这是Lombok
的一部分):
@Configuration
@ConfigurationProperties(prefix = "redis.orders")
@NoArgsConstructor
@Getter
@Setter
public class RedisOrderProperties {
@NotEmpty
private String redisOrdersTimestampKey;
@NotEmpty
private String redisOrdersReturnsKey;
@NotEmpty
private String redisOrdersQuantityKey;
}
按如下所示在您的服务中对其进行自动布线(注意:构造函数注入应优先于字段注入):
@Service
public class BookService {
private final RedisOrderProperties redisOrderProperties;
private final StringRedisTemplate redisTemplate;
@Autowired
public BookService(RedisOrderProperties redisOrderProperties, StringRedisTemplate redisTemplate) {
this.redisOrderProperties = redisOrderProperties;
this.redisTemplate = redisTemplate;
}
}