ホームページ  >  記事  >  Java  >  SpringBootの@Valueが無効なapplication.properties設定を取得する問題の解決方法

SpringBootの@Valueが無効なapplication.properties設定を取得する問題の解決方法

WBOY
WBOY転載
2023-05-16 11:52:051487ブラウズ

@Value で application.properties 構成が無効になる問題が発生します

無効の理由は、主に @Value を使用する際の注意事項に注意するためです:

  • 1. 静的変数には作用できません (static);

  • 2. 定数には作用できません (final);

  • 3. 登録されたクラスで使用されていないものには作用できません (@Componet、@Configuration などを使用する必要があります);

  • #4. この属性を持つクラスを使用する場合, @Autowired と new のみを使用できます。これらの構成は自動的に挿入されません。

これらの予防措置は、その原則によっても決定されます。

スプリングブートの起動プロセスには、次の 2 つの重要なプロセスがあります。

  • 1. コンテナ内の Bean をスキャンして解析し、情報登録と同様に beanFactory に登録します。

  • 2. これらのスキャンされた Bean をインスタンス化して初期化します。

@値は第 2 段階で解析されます。 BeanPostProcessor は、Bean の初期化の前後にユーザーが Bean 上で操作できるインターフェース メソッドを定義します。その重要な実装クラスの 1 つである AutowiredAnnotationBeanPostProcessor は、javadoc に記載されているように、Bean 内の @Autowired および @Value アノテーションの注入機能のサポートを提供します。

次は 2 つの方法です:

resource.test.imageServer=http://image.everest.com

1. 1 つ目は

@Configuration
public class EverestConfig {
 
    @Value("${resource.test.imageServer}")
    private String imageServer;
 
    public String getImageServer() {
        return imageServer;
    }
 
}

2. 2 つ目は

@Component
@ConfigurationProperties(prefix = "resource.test")
public class TestUtil {
 
    public String imageServer;
 
    public String getImageServer() {
        return imageServer;
    }
 
    public void setImageServer(String imageServer) {
        this.imageServer = imageServer;
    }
}

次に必要な場所に挿入します。

    @Autowired
    private TestUtil testUtil;
 
    @Autowired
    private EverestConfig everestConfig;
 
 
    @GetMapping("getImageServer")
    public String getImageServer() {
        return testUtil.getImageServer();
//        return everestConfig.getImageServer();
    }

@Value は、application.properties の構成値を Null として取得します。

@Value("${spring.datasource.url}")

private String url;

は、値を NUll として取得します。

解決策

新しいメソッドを使用してツール クラス (DBUtils) オブジェクトを作成するのではなく、Springboot によって管理される @Autowired メソッドを使用し、ツール クラスに @Component を追加します。定義された属性変数に static を追加しないでください。

正しいアプローチ

@Autowired
private DBUtils jdbc;
  
@Component
public class DBUtils{
    
    @Value("${spring.datasource.url}")
    private String url;
}

以上がSpringBootの@Valueが無効なapplication.properties設定を取得する問題の解決方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。