亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

執行@Bean注解方法時自動裝配環境變量為NULL

執行@Bean注解方法時自動裝配環境變量為NULL

汪汪一只貓 2023-09-27 21:20:07
我試圖通過自動裝配環境變量來檢索從 .yml 文件加載的屬性,但出現空指針異常:Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [com/example/AppConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.sql.DataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.NullPointerException我想以編程方式創建一個 DataSource bean,同時將詳細信息(用戶名、密碼、主機等)保留在配置文件中。這是我目前的設置:@SpringBootApplication@ImportResource({"classpath:controllers.xml"})public class WebApplication{  public static void main(String[] args){    SpringApplication.run(WebApplication.class, args);  }}server:  port: 8080database:  host: localhost  instance: db_instance  port: 3036  user: root  password: passkey@Configurationpublic class AppConfig {  @Autowired  private Environment environment;  @Bean  public DataSource dataSource() {    String url = "jdbc:mysql://" +        environment.getProperty("database.host") +        ":" + environment.getProperty("database.port") +        "/" + environment.getProperty("database.instance") +        "?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true";    return DataSourceBuilder.create()        .driverClassName("com.mysql.jdbc.Driver")        .url(url)        .username(environment.getProperty("database.user"))        .password(environment.getProperty("database.password"))        .build();  }}我不偏愛 .yml 文件格式或使用環境變量。如果有不同/更好的方法來從 .yml 文件(或其他文件格式)獲取數據,我愿意嘗試。
查看完整描述

2 回答

?
翻閱古今

TA貢獻1780條經驗 獲得超5個贊

有很多方法可以做到這一點。

  1. 由于您使用的是 Springboot,因此不必像這樣顯式創建數據源(如果這樣做,您將錯過 springboot 的主要功能之一)。如果你用右鍵在properties/yml中聲明參數,Springboot會自動為你配置這個。
    搜索spring.datasource......

  2. 如果您希望自己執行此操作,那么您可以使用以下命令將properties/yml文件中的所有變量自動裝配到Bean中,?ConfigurationProperties然后在bean創建方法中使用該bean作為方法參數。

  3. 在您的 AppConfig 類中使用@Value{}并在您的數據源創建方法中使用它。


查看完整回答
反對 回復 2023-09-27
?
慕碼人8056858

TA貢獻1803條經驗 獲得超6個贊

不太確定controllers.xml 中有什么。但我能夠獲取環境變量并使用它。

我將您在 application.yml 中提到的屬性放置在 /src/main/resources 中

我使用 Spring boot-2.1.9 版本使其工作,下面是我的 pom.xml-

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>


    <groupId>com.sample</groupId>

    <artifactId>stackoverflow</artifactId>

    <version>0.0.1</version>

    <packaging>jar</packaging>


    <name>stackoverflow</name>

    <description>stackoverflow</description>


    <parent>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-parent</artifactId>

        <version>2.1.9.RELEASE</version>

        <relativePath /> <!-- lookup parent from repository -->

    </parent>


    <properties>

        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <java.version>1.8</java.version>

    </properties>


    <dependencies>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter</artifactId>

        </dependency>


        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

        </dependency>


        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa -->

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-data-jpa</artifactId>


        </dependency>




        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-test</artifactId>

            <scope>test</scope>

        </dependency>


        <dependency>

            <groupId>mysql</groupId>

            <artifactId>mysql-connector-java</artifactId>

        </dependency>

    </dependencies>


    <build>

        <plugins>

            <plugin>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-maven-plugin</artifactId>

            </plugin>

        </plugins>

    </build>


    <repositories>

        <repository>

            <id>spring-snapshots</id>

            <name>Spring Snapshots</name>

            <url>https://repo.spring.io/libs-snapshot-local</url>

            <snapshots>

                <enabled>true</enabled>

            </snapshots>

        </repository>

        <repository>

            <id>ojo-snapshots</id>

            <name>OJO Snapshots</name>

            <url>https://oss.jfrog.org/artifactory/libs-snapshot</url>

            <snapshots>

                <enabled>true</enabled>

            </snapshots>

        </repository>

    </repositories>



</project>


查看完整回答
反對 回復 2023-09-27
  • 2 回答
  • 0 關注
  • 206 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號