15

アプリケーションのオブジェクト内の.propertiesファイルからプロパティを取得しようとしています。これを行う方法についての私の唯一の知識は、Environmentオブジェクトを介したものです。

それは私の構成でうまく機能します...

@Configuration
@ComponentScan(basePackages = {
        "com.production"
})
@PropertySource(value = {
        "classpath:/application.properties",
        "classpath:/environment-${FETTER_ENVIRONMENT}.properties"
})
@EnableJpaRepositories("com.production.repositories")
@EnableTransactionManagement
public class Config {
    private static final String PROPERTY_NAME_DATABASE_URL = "db.url";
    private static final String PROPERTY_NAME_DATABASE_USER = "db.user";
    private static final String PROPERTY_NAME_DATABASE_PASSWORD = "db.password";

    private static final String PROPERTY_NAME_HIBERNATE_DIALECT = "hibernate.dialect";
    private static final String PROPERTY_NAME_HIBERNATE_FORMAT_SQL = "hibernate.format_sql";
    private static final String PROPERTY_NAME_HIBERNATE_SHOW_SQL = "hibernate.show_sql";
    private static final String PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN = "entitymanager.packages.to.scan";

    @Resource
    Environment environment;

しかし、私は別のクラスでそれをやろうとしました、そしてそれはnullです。と手動注入を使用してみました@Resource@Autowired

Environmentこれを防ぐために何か特別なことがありますか?

@Component
public class Vendor {
    private String token;

    @Autowired
    private Environment environment;

    public Vendor() {
        //get token from config
        //Environment environment = (Environment) ApplicationContextProvider.getApplicationContext().getBean("environment");
        setToken(environment.getProperty("api.vendor.token"));
    }

    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
    }
}

更新:の使用法を強調するこのリソースを見つけまし@Valueたが、アプリケーションでXML構成を使用していません。

これが私が探しているものかもしれないようです:Spring3.1のプロパティをプログラムでロードする

4

2 に答える 2

13

@Valueアノテーションを使用する必要があります。<context:property-placeholderただし、xmlで宣言する必要がある前に。

詳細はこちらをご覧ください。

また、別の方法:

@Inject
ApplicationContext context;
......
Enviroment env = context.getEnvironment();
于 2013-03-13T15:02:42.990 に答える
13

@Autowired以下のようにSpringアノテーションを使用できますが、クラスに@Componentまたは同様のアノテーションを付けるようにしてください。

@Autowired
Environment env;

また、Beanがスキャン用に表示されていることを確認してください。つまりcom.production、ケースのパッケージ内にある必要があります。コンポーネントスキャンは次のように有効にする必要があります

<context:component-scan base-package="com.production"/>

また

@ComponentScan(basePackages = {"com.production"} )
于 2017-02-14T11:29:27.780 に答える