การใช้ตัวแปร env ใน application.properties ของ Spring Boot


200

เรากำลังทำงานบนเว็บแอพSpring Bootและฐานข้อมูลที่เราใช้คือMySql ;

  • การตั้งค่าที่เรามีคือเราทดสอบในพื้นที่ก่อน (หมายความว่าเราต้องติดตั้ง MySql บนพีซีของเรา);

  • จากนั้นเราดันไปที่Bitbucket ;

  • เจนกินส์จะตรวจจับการผลักดันใหม่ไปยัง Bitbucket โดยอัตโนมัติและทำการสร้างมันขึ้นมา (สำหรับเจนกินส์ mvn บิวด์เพื่อส่งต่อเรายังต้องติดตั้ง MySql บนเครื่องเสมือนที่รันเจนกินส์)

  • ถ้า Jenkins สร้างรหัสผ่านเราจะส่งรหัสไปยังแอปพลิเคชันของเราบนOpenShift (โดยใช้ปลั๊กอินการปรับใช้ Openshift บน Jenkins)

ปัญหาที่เรามีตามที่คุณอาจจะคิดได้ก็คือ:

  • ในapplication.propertiesเราไม่สามารถยากรหัสข้อมูล MySql เนื่องจากโครงการของเราจะได้รับการทำงานใน 3 สถานที่ที่แตกต่างกัน ( ท้องถิ่น , เจนกินส์และOpenShift ) เราต้องทำให้แบบไดนามิกข้อมูลแหล่งข้อมูลในapplication.properties(เรารู้ว่ามีวิธีที่แตกต่างของการทำมัน แต่เรากำลังทำงานในการแก้ปัญหานี้ได้ในขณะนี้)

    spring.datasource.url = 
    spring.datasource.username = 
    spring.datasource.password = 
    

วิธีแก้ปัญหาที่เราเกิดขึ้นคือเราสร้างตัวแปรสภาพแวดล้อมของระบบในเครื่องและใน Jenkins vm (ตั้งชื่อพวกเขาในลักษณะเดียวกับ OpenShift ตั้งชื่อพวกเขา) และกำหนดค่าที่เหมาะสมตามลำดับ:

export OPENSHIFT_MYSQL_DB_HOST="jdbc:mysql://localhost"
export OPENSHIFT_MYSQL_DB_PORT="3306"
export OPENSHIFT_MYSQL_DB_USERNAME="root"
export OPENSHIFT_MYSQL_DB_PASSWORD="123asd"

เราได้ทำสิ่งนี้แล้วและได้ผล เราได้ตรวจสอบแล้วMap<String, String> env = System.getenv();ว่าตัวแปรสภาพแวดล้อมสามารถสร้างเป็นตัวแปร java ได้เช่น:

String password = env.get("OPENSHIFT_MYSQL_DB_PASSWORD");   
String userName = env.get("OPENSHIFT_MYSQL_DB_USERNAME");   
String sqlURL = env.get("OPENSHIFT_MYSQL_DB_HOST"); 
String sqlPort = env.get("OPENSHIFT_MYSQL_DB_PORT");

ตอนนี้สิ่งเดียวที่เหลือคือเราต้องใช้ตัวแปร java เหล่านี้ในของเราapplication.propertiesและนั่นคือสิ่งที่เรากำลังมีปัญหา

ซึ่งในโฟลเดอร์และวิธีการทำเราจำเป็นต้องกำหนดpassword, userName, sqlURLและsqlPortตัวแปรสำหรับการapplication.propertiesที่จะสามารถที่จะเห็นพวกเขาและวิธีการที่เราจะรวมไว้ในapplication.properties?

เราได้ลองหลายสิ่งหลายอย่างหนึ่งในนั้นคือ:

spring.datasource.url = ${sqlURL}:${sqlPort}/"nameofDB"
spring.datasource.username = ${userName}
spring.datasource.password = ${password}

ไม่โชคดี เราอาจจะไม่ได้ใส่ตัวแปร env เหล่านี้ในระดับที่เหมาะสม / application.propertiesโฟลเดอร์หรือใช้พวกเขาไม่ถูกต้องใน

ความช่วยเหลือของคุณได้รับการชื่นชมอย่างมาก !!

ขอบคุณ!


3
อ่าน@ConfigurationPropertiesเพื่อเรียนรู้เพิ่มเติม อย่างไรก็ตามนี่เป็นกรณีการใช้งานที่สมบูรณ์แบบสำหรับคุณสมบัติการกำหนดค่าเฉพาะโปรไฟล์
Eddie B

คำตอบ:


270

คุณไม่จำเป็นต้องใช้ตัวแปรจาวา หากต้องการรวมตัวแปรระบบ env เพิ่มสิ่งต่อไปนี้ในapplication.propertiesไฟล์ของคุณ:

spring.datasource.url = ${OPENSHIFT_MYSQL_DB_HOST}:${OPENSHIFT_MYSQL_DB_PORT}/"nameofDB"
spring.datasource.username = ${OPENSHIFT_MYSQL_DB_USERNAME}
spring.datasource.password = ${OPENSHIFT_MYSQL_DB_PASSWORD}

แต่วิธีที่แนะนำโดย@ Stefan Iseleเป็นที่นิยมมากขึ้นเพราะในกรณีนี้คุณต้องประกาศเพียงหนึ่งตัวแปร spring.profiles.activeenv: Spring จะอ่านไฟล์คุณสมบัติที่เหมาะสมโดยอัตโนมัติโดยapplication-{profile-name}.propertiesแม่แบบ


12
วิธีนี้สะดวกกว่าสำหรับการเชื่อมโยงนักเทียบท่า ตัวอย่างเช่น:docker run --name my-tomcat -p 127.0.0.1:8080:8080 -e APP_DB_DB=mydb -e APP_DB_USER=dbuser -e APP_DB_PASS=dbpass --link mongo-myapp:mongo -v /path-to/tomcat/webapps:/usr/local/tomcat/webapps -d tomcat:8-jre8-alpine
FıratKÜÇÜK

17
นี่เป็นวิธีที่ดีที่สุดที่จะไป การใช้ตัวแปรสภาพแวดล้อมหมายความว่าคุณไม่จำเป็นต้องแสดงความลับเป็นข้อความธรรมดาพร้อมกับใบสมัครของคุณ สิ่งนี้มีความปลอดภัยมากขึ้นและลดการพึ่งพามาตรการรักษาความปลอดภัยการเข้าถึงซอร์สโค้ดของคุณเพื่อปกป้องทรัพย์สินทั้งหมดของคุณ การโพสต์ SO พร้อมกับคุณสมบัติโดยไม่ตั้งใจไม่ส่งผลให้เกิดการรั่วไหลของข้อมูล
kipper_t

51
ฉันต้องการที่จะเพิ่มลงในนี้และพูดถึงว่าถ้าคุณใช้ spring boot (ไม่ได้ตรวจสอบว่ามันทำงานโดยไม่ได้ boot) แล้วคุณสมบัติใด ๆ สามารถ overriden ผ่านตัวแปรสภาพแวดล้อมโดยอัตโนมัติโดยไม่ต้องแก้ไข application.properties ของคุณ เช่นถ้าคุณมีคุณสมบัติที่เรียกว่าแล้วตัวแปรสภาพแวดล้อมที่สอดคล้องกันจะเป็น:spring.activemq.broker-url SPRING_ACTIVEMQ_BROKER_URLจุดและขีดคั่นจะถูกแปลงเป็นขีดล่างโดยอัตโนมัติ สะดวกมากเมื่อทำงานกับคอนเทนเนอร์ / สปริงบูต
abe

15
หากคุณออกแบบสำหรับคลาวด์ไม่ใช่วิธีที่เหมาะสมกว่าในการใช้โปรไฟล์สปริง แนะนำให้ใช้ตัวแปรสภาพแวดล้อมตามมาตรฐานแอปปัจจัย 12 ตัว: 12factor.net/config
Mikhail Golubtsov

6
ฉันรู้ว่าหัวข้อนี้ค่อนข้างเก่า แต่คุณสามารถรวมทั้งการตั้งค่าตัวแปรสภาพแวดล้อมและการตั้งค่าโปรไฟล์สปริง โปรไฟล์ dev คุณควรมีข้อมูลคงที่ในขณะที่โปรไฟล์การผลิตของคุณสามารถใช้ประโยชน์จากตัวแปรสภาพแวดล้อม ด้วยวิธีนี้ dev ไม่จำเป็นต้องกำหนดตัวแปรสภาพแวดล้อมบนเครื่องของพวกเขาอีกต่อไปหากพวกเขาต้องการปรับใช้โปรไฟล์การพัฒนา
underscore_05

72

วิธีที่ง่ายที่สุดที่จะมีการกำหนดค่าที่แตกต่างกันสำหรับสภาพแวดล้อมที่แตกต่างกันคือการใช้โปรไฟล์สปริง ดูการกำหนดค่า externalised

สิ่งนี้ทำให้คุณมีความยืดหยุ่นมาก ฉันใช้มันในโครงการของฉันและมันมีประโยชน์มาก ในกรณีของคุณคุณจะมี 3 โปรไฟล์: 'ท้องถิ่น', 'เจนกินส์' และ 'openshift'

แล้วคุณมีรายละเอียด 3 ไฟล์คุณสมบัติเฉพาะ: application-local.properties, application-jenkins.propertiesและapplication-openshift.properties

คุณสามารถตั้งค่าคุณสมบัติสำหรับสภาพแวดล้อมที่เกี่ยวข้องได้ เมื่อคุณเรียกใช้แอพคุณจะต้องระบุโปรไฟล์เพื่อเปิดใช้งานเช่นนี้: -Dspring.profiles.active=jenkins

แก้ไข

ตามเอกสารฤดูใบไม้ผลิคุณสามารถตั้งค่าตัวแปรสภาพแวดล้อมระบบ SPRING_PROFILES_ACTIVEเพื่อเปิดใช้งานโปรไฟล์และไม่จำเป็นต้องผ่านมันเป็นพารามิเตอร์

มีวิธีใดบ้างที่จะผ่านตัวเลือกโปรไฟล์ที่ใช้งานสำหรับแอปพลิเคชันเว็บในเวลาทำงาน

ไม่สปริงกำหนดโพรไฟล์ที่ใช้งานเป็นหนึ่งในขั้นตอนแรกเมื่อสร้างบริบทของแอปพลิเคชัน โปรไฟล์ที่แอ็คทีฟจะถูกใช้เพื่อตัดสินใจว่าไฟล์คุณสมบัติใดถูกอ่านและถั่วใดที่ถูกอินสแตนซ์ เมื่อเริ่มต้นแอปพลิเคชันแล้วจะไม่สามารถเปลี่ยนแปลงได้


4
ฉันชอบคำตอบนี้ แต่ถ้าคุณต้องการให้ชื่อโปรไฟล์มาจากสภาพแวดล้อม ฉันได้ลอง -Dspring.active.profiles = $ SPRING_ACTIVE_PROFILES และตั้งค่าระบบ env var ใน /etc/profile.d/myenvvars.sh แต่ Spring Boot ไม่ได้เลือกนั่น
Tom Hartwell

1
SPRING_PROFILES_ACTIVE ใช้งานได้เนื่องจากคุณสมบัติการเชื่อมโยงที่ผ่อนคลายของ spring boot docs.spring.io/spring-boot/docs/1.3.0.BUILD-SNAPSHOT/reference/…
feed.me

5
ขอบคุณสำหรับคำตอบนี้ Stefan มันใช้งานได้สำหรับฉัน แต่มีการเปลี่ยนแปลงหนึ่งครั้ง - คุณสมบัติคือ spring.profiles.active และไม่ใช่ spring.active.profiles
Rudi

11
ในขณะที่โปรไฟล์สปริงนั้นมีประโยชน์มากเมื่อเทียบกับ OP แต่ก็ไม่เหมาะสม นี่คือสาเหตุที่วิธีการจัดเก็บรหัสที่มาและความไวของข้อมูลคุณสมบัติที่เก็บไว้กับที่ บริบท OP คือการเข้าถึงฐานข้อมูล สำหรับสถานการณ์นั้นคุณไม่ต้องการรายละเอียดของผลิตภัณฑ์เป็นข้อความธรรมดาในแหล่งที่มา ซึ่งหมายความว่าหากแหล่งที่มาถูกบุกรุกฐานข้อมูลก็จะถูกโจมตีด้วยเช่นกัน เป็นการดีกว่าที่จะใช้ตัวแปร env หรือเครื่องมือลับสำหรับสิ่งนี้แทนเช่น Vault ฉันชอบ env ฉันต้องการให้สภาพแวดล้อมทั้งหมดทำงานในลักษณะเดียวกันในเรื่องนี้เพื่อความมั่นคง มันหลีกเลี่ยงอุบัติเหตุในอนาคต
kipper_t

2
คุณสามารถใช้ไฟล์คุณสมบัติโปรไฟล์สปริงบูตภายนอกแอปพลิเคชัน JAR ตัวอย่างเช่นไฟล์เฉพาะสภาพแวดล้อมนี้application-production.propertiesจะถูกนำไปใช้กับเครื่องที่ผลิตอย่างปลอดภัยและโดยทั่วไปจะไม่อยู่ในที่เก็บซอร์สโค้ดของแอปพลิเคชัน
Colin D Bennett

13

นี่คือการตอบสนองต่อความคิดเห็นจำนวนมากเนื่องจากชื่อเสียงของฉันไม่สูงพอที่จะแสดงความคิดเห็นโดยตรง

คุณสามารถระบุโปรไฟล์ที่รันไทม์ตราบใดที่บริบทแอปพลิเคชันยังไม่ได้โหลด

// Previous answers incorrectly used "spring.active.profiles" instead of
// "spring.profiles.active" (as noted in the comments).
// Use AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME to avoid this mistake.

System.setProperty(AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME, environment);
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("/META-INF/spring/applicationContext.xml");

12

Flayway ไม่รู้จักตัวแปรสภาพแวดล้อมโดยตรงในapplication.properties (Spring-Boot V2.1) เช่น

spring.datasource.url=jdbc:mysql://${DB_HOSTNAME}:${DB_PORT}/${DB_DATABASE}
spring.datasource.username=${DB_USER}
spring.datasource.password=${DB_PASS}

เพื่อแก้ปัญหานี้ฉันทำตัวแปรสภาพแวดล้อมนี้ฉันมักจะสร้างไฟล์. env:

SPRING_DATASOURCE_URL=jdbc:mysql://127.0.0.1:3306/place
SPRING_DATASOURCE_USERNAME=root
SPRING_DATASOURCE_PASSWORD=root

และส่งออกตัวแปรไปยังสภาพแวดล้อมของฉัน:

export $(cat .env | xargs)

และสุดท้ายก็แค่รันคำสั่ง

mvn spring-boot:run

หรือเรียกใช้ไฟล์ jar ของคุณ

java -jar target/your-file.jar

มีวิธีอื่นที่นี่: https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/maven-plugin/examples/run-env-variables.html


1
env-vars คืออะไร พวกเขาใช้อย่างไร คำตอบของคุณอ้างถึงสิ่งต่าง ๆ โดยไม่มีคำอธิบายที่สมบูรณ์และคุณไม่ได้รวมลิงก์ใด ๆ ฉันเกือบจะลงคะแนนนี้ แต่ฉันเห็นว่าตัวแทนของคุณคือ 21 คุณจึงเป็นคนใหม่และคนคนหนึ่งพบว่าคำตอบของคุณมีประโยชน์ดังนั้นฉันจึงปล่อยมันไป แต่พยายามให้ข้อมูลเพิ่มเติมในคำตอบในอนาคตและยินดีต้อนรับ SO (Stack Overflow) ฉันหวังว่าคุณจะสนุกกับมันมากเท่าที่ฉันทำ
PatS

2
ขอบคุณ @PatS ฉันเพิ่มรายละเอียดหวังว่ามันจะมีประโยชน์
Felipe Girotti

1
การเปลี่ยนแปลงที่ยอดเยี่ยม ขอบคุณที่อัพเดทคำตอบของคุณ
PatS

9

นี่คือข้อมูลโค้ดผ่านทางห่วงโซ่ของไฟล์คุณสมบัติสภาพแวดล้อมที่กำลังโหลดสำหรับสภาพแวดล้อมที่แตกต่างกัน

ไฟล์คุณสมบัติภายใต้ทรัพยากรแอปพลิเคชันของคุณ ( src / main / resources ): -

 1. application.properties
 2. application-dev.properties
 3. application-uat.properties
 4. application-prod.properties

อย่างดีเลิศapplication.propertiesมีคุณสมบัติทั่วไปทั้งหมดที่สามารถเข้าถึงได้สำหรับทุกสภาพแวดล้อมและคุณสมบัติที่เกี่ยวข้องกับสภาพแวดล้อมทำงานได้เฉพาะในสภาพแวดล้อมที่ระบุ ดังนั้นลำดับของการโหลดไฟล์คุณสมบัติเหล่านี้จะเป็นในลักษณะดังกล่าว -

 application.properties -> application.{spring.profiles.active}.properties.

ข้อมูลโค้ดที่นี่: -

    import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
    import org.springframework.core.io.ClassPathResource;
    import org.springframework.core.io.Resource;

    public class PropertiesUtils {

        public static final String SPRING_PROFILES_ACTIVE = "spring.profiles.active";

        public static void initProperties() {
            String activeProfile = System.getProperty(SPRING_PROFILES_ACTIVE);
            if (activeProfile == null) {
                activeProfile = "dev";
            }
            PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer
                    = new PropertySourcesPlaceholderConfigurer();
            Resource[] resources = new ClassPathResource[]
                    {new ClassPathResource("application.properties"),
                            new ClassPathResource("application-" + activeProfile + ".properties")};
            propertySourcesPlaceholderConfigurer.setLocations(resources);

        }
    }

2
Spring Boot ไม่จัดการสถานการณ์นี้นอกกรอบหรือไม่ ดูเอกสารการกำหนดค่าภายนอกที่นี่
ChickenFeet

4

บางทีฉันอาจเขียนช้าเกินไป แต่ฉันได้รับปัญหาที่คล้ายกันเมื่อฉันพยายามแทนที่วิธีสำหรับการอ่านคุณสมบัติ

ปัญหาของฉันได้รับ: 1) อ่านคุณสมบัติจาก env หากคุณสมบัตินี้ได้รับการตั้งค่าใน env 2) อ่านคุณสมบัติจากคุณสมบัติของระบบหากคุณสมบัตินี้ได้รับการตั้งค่าในคุณสมบัติของระบบ 3) และสุดท้ายอ่านจากคุณสมบัติของแอปพลิเคชัน

ดังนั้นเพื่อแก้ไขปัญหานี้ฉันไปที่คลาสการกำหนดค่า bean ของฉัน

@Validated
@Configuration
@ConfigurationProperties(prefix = ApplicationConfiguration.PREFIX)
@PropertySource(value = "${application.properties.path}", factory = PropertySourceFactoryCustom.class)
@Data // lombok
public class ApplicationConfiguration {

    static final String PREFIX = "application";

    @NotBlank
    private String keysPath;

    @NotBlank
    private String publicKeyName;

    @NotNull
    private Long tokenTimeout;

    private Boolean devMode;

    public void setKeysPath(String keysPath) {
        this.keysPath = StringUtils.cleanPath(keysPath);
    }
}

และเขียนทับโรงงานใน @PropertySource จากนั้นฉันก็สร้างการใช้งานของฉันเองเพื่ออ่านคุณสมบัติ

    public class PropertySourceFactoryCustom implements PropertySourceFactory {

        @Override
        public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
            return name != null ? new PropertySourceCustom(name, resource) : new PropertySourceCustom(resource);
        }


    }

และสร้าง PropertySourceCustom

public class PropertySourceCustom extends ResourcePropertySource {


    public LifeSourcePropertySource(String name, EncodedResource resource) throws IOException {
        super(name, resource);
    }

    public LifeSourcePropertySource(EncodedResource resource) throws IOException {
        super(resource);
    }

    public LifeSourcePropertySource(String name, Resource resource) throws IOException {
        super(name, resource);
    }

    public LifeSourcePropertySource(Resource resource) throws IOException {
        super(resource);
    }

    public LifeSourcePropertySource(String name, String location, ClassLoader classLoader) throws IOException {
        super(name, location, classLoader);
    }

    public LifeSourcePropertySource(String location, ClassLoader classLoader) throws IOException {
        super(location, classLoader);
    }

    public LifeSourcePropertySource(String name, String location) throws IOException {
        super(name, location);
    }

    public LifeSourcePropertySource(String location) throws IOException {
        super(location);
    }

    @Override
    public Object getProperty(String name) {

        if (StringUtils.isNotBlank(System.getenv(name)))
            return System.getenv(name);

        if (StringUtils.isNotBlank(System.getProperty(name)))
            return System.getProperty(name);

        return super.getProperty(name);
    }
}

ดังนั้นสิ่งนี้ช่วยฉัน


4

การใช้ Spring context 5.0 ฉันประสบความสำเร็จในการโหลดไฟล์คุณสมบัติที่ถูกต้องตามสภาพแวดล้อมของระบบผ่านหมายเหตุประกอบต่อไปนี้

@PropertySources({
    @PropertySource("classpath:application.properties"),
    @PropertySource("classpath:application-${MYENV:test}.properties")})

นี่คือค่า MYENV ถูกอ่านจากสภาพแวดล้อมของระบบและหากไม่มีสภาพแวดล้อมของระบบไฟล์คุณสมบัติสภาพแวดล้อมการทดสอบเริ่มต้นจะถูกโหลดถ้าฉันให้ค่า MYENV ผิด - จะไม่สามารถเริ่มแอปพลิเคชันได้

หมายเหตุ: สำหรับแต่ละโปรไฟล์คุณต้องการบำรุงรักษา - คุณจะต้องสร้างแอปพลิเคชัน - [โปรไฟล์] ไฟล์. property และแม้ว่าฉันจะใช้ Spring บริบท 5.0 และไม่ใช่ Spring boot - ฉันเชื่อว่าสิ่งนี้จะใช้งานได้ใน Spring 4.1


3

ฉันพบปัญหาเดียวกันกับผู้เขียนคำถาม สำหรับคำตอบกรณีของเราในคำถามนี้ไม่เพียงพอเนื่องจากสมาชิกแต่ละคนในทีมของฉันมีสภาพแวดล้อมในท้องถิ่นที่แตกต่างกันและเราต้องการ.gitignoreไฟล์ที่มีสตริงการเชื่อมต่อ db และข้อมูลรับรองที่แตกต่างกันอย่างแน่นอนดังนั้นผู้คนจึงไม่ยอมรับไฟล์ทั่วไป โดยไม่ได้ตั้งใจและทำลายการเชื่อมต่อฐานข้อมูลของผู้อื่น

ยิ่งไปกว่านั้นเมื่อเราทำตามขั้นตอนด้านล่างมันง่ายในการปรับใช้ในสภาพแวดล้อมที่แตกต่างกันและเนื่องจากโบนัสพิเศษเราไม่จำเป็นต้องมีข้อมูลที่ละเอียดอ่อนในการควบคุมเวอร์ชันเลย

รับแนวคิดจาก PHP Symfony 3 framework ที่มีparameters.yml(.gitignored) และ a parameters.yml.dist(ซึ่งเป็นตัวอย่างที่สร้างขึ้นเป็นครั้งแรกผ่านcomposer install)

ฉันไม่ได้ดังต่อไปนี้การรวมความรู้จากคำตอบดังต่อไปนี้: https://stackoverflow.com/a/35534970/986160และhttps://stackoverflow.com/a/35535138/986160

โดยพื้นฐานแล้วสิ่งนี้จะให้อิสระในการใช้การสืบทอดของการกำหนดค่าสปริงและเลือกโปรไฟล์ที่ใช้งานผ่านการกำหนดค่าที่ด้านบนสุดพร้อมข้อมูลประจำตัวที่ละเอียดอ่อนพิเศษดังต่อไปนี้:

application.yml.dist (ตัวอย่าง)

    spring:
      profiles:
        active: local/dev/prod
      datasource:
        username:
        password:
        url: jdbc:mysql://localhost:3306/db?useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8

application.yml (.gitignore-d บนเซิร์ฟเวอร์ dev)

spring:
  profiles:
    active: dev
  datasource:
    username: root
    password: verysecretpassword
    url: jdbc:mysql://localhost:3306/real_db?useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8

application.yml (.gitignore-d บนเครื่องท้องถิ่น)

spring:
  profiles:
    active: dev
  datasource:
    username: root
    password: rootroot
    url: jdbc:mysql://localhost:3306/xampp_db?useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8

application-dev.yml (คุณสมบัติเฉพาะสภาพแวดล้อมพิเศษไม่ไวต่อความรู้สึก)

spring:
  datasource:
    testWhileIdle: true
    validationQuery: SELECT 1
  jpa:
    show-sql: true
    format-sql: true
    hibernate:
      ddl-auto: create-droop
      naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy
    properties:
      hibernate:
        dialect: org.hibernate.dialect.MySQL57InnoDBDialect

เดียวกันสามารถทำได้ด้วยคุณสมบัติ


0

หากไฟล์คุณสมบัติถูกทำให้เป็นภายนอกเป็นตัวแปรสภาพแวดล้อมหลังจากการรันการกำหนดค่าสามารถเพิ่มลงใน IDE:

--spring.config.additional-location={PATH_OF_EXTERNAL_PROP}

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.