是否可以读取@Repository内的属性文件值。如有任何帮助,我们将不胜感激。
@Repository
dwbf0jvd1#
正如M.代努姆在评论部分提到的,@Repository只是@Component的一个变体,可以通过注入Environment来读取属性文件,也可以只使用@Value。
@Component
Environment
@Value
nwnhqdif2#
如果您使用类存储库,则可以在任何非final字段上使用@Value注解来自动填充它。另一方面,如果您使用的是接口存储库,则不能直接读取属性,因为您没有地方注入组件/值。无论如何,我找到了一种变通办法,可以用来实现类似的结果。首先创建一个实现ApplicationContextProvider的类:
ApplicationContextProvider
@Component public class StaticPropertiesProvider implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setApplicationContext(@Nonnull final ApplicationContext applicationContext) throws BeansException { StaticPropertiesProvider.applicationContext = applicationContext; } public static <T> T getProperty(final String property, final Class<T> clazz) { return applicationContext.getEnvironment().getProperty(property, clazz); } }
当应用程序启动时,静态applicationContext字段将使用应用程序上下文填充,以便您以后可以从静态getProperties方法使用它。然后,您可以从存储库中的默认方法调用它,例如:
applicationContext
getProperties
public interface MyRepository extends MongoRepository<MyDocument, String> { @Query(value = "{'myProperty': ?0}") List<MyDocument> findByMyProperty(int myProperty); default List<MyDocument> findByMyProperty() { final var myPropertyDefault = StaticPropertiesProvider.getProperty("my.property", Integer.class); return this.findByMyProperty(myProperty); } }
很明显,应该有一个属性名my.property,在application.properties中有一个int值。(you甚至可以对JPA存储库执行相同的操作)
my.property
application.properties
2条答案
按热度按时间dwbf0jvd1#
正如M.代努姆在评论部分提到的,
@Repository
只是@Component
的一个变体,可以通过注入Environment
来读取属性文件,也可以只使用@Value
。nwnhqdif2#
如果您使用类存储库,则可以在任何非final字段上使用
@Value
注解来自动填充它。另一方面,如果您使用的是接口存储库,则不能直接读取属性,因为您没有地方注入组件/值。
无论如何,我找到了一种变通办法,可以用来实现类似的结果。
首先创建一个实现
ApplicationContextProvider
的类:当应用程序启动时,静态
applicationContext
字段将使用应用程序上下文填充,以便您以后可以从静态getProperties
方法使用它。然后,您可以从存储库中的默认方法调用它,例如:
很明显,应该有一个属性名
my.property
,在application.properties
中有一个int值。(you甚至可以对JPA存储库执行相同的操作)