Как использовать конфигурационные переменные Heroku в файле application.properties приложения Spring Boot? - PullRequest
0 голосов
/ 19 января 2020

Я не могу использовать конфигурационные переменные, которые я установил в Spring Boot Application. Все работает нормально, если жестко закодировать учетные данные моей базы данных в application.properties, но он не может обнаружить переменные, когда я пытаюсь получить их из конфигурационных переменных.

Мой файл application.properties:

spring.datasource.hikari.connection-timeout=20000
spring.datasource.hikari.maximum-pool-size=5

spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=${SPRING_DATASOURCE_URL}
spring.datasource.username=my_username
spring.datasource.password=my_password

spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto=update

результат команды heroku config:

=== danef-dictionary-api Config Vars
DATABASE_URL:          postgres://my_username:my_password@host_name:port/db_name
PAPERTRAIL_API_TOKEN:  papertrail_api_token
SPRING_DATASOURCE_URL: jdbc:postgresql://host_name:port/db_name

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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>net.danef</groupId>
    <artifactId>danef-dictionary-api</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>danef-dictionary-api</name>
    <description>Danef Dictionary API</description>

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

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>3.0.1</version>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

результат heroku local web:

2:12:45 PM web.1 |    .   ____          _            __ _ _
2:12:45 PM web.1 |   /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
2:12:45 PM web.1 |  ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
2:12:45 PM web.1 |   \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
2:12:45 PM web.1 |    '  |____| .__|_| |_|_| |_\__, | / / / /
2:12:45 PM web.1 |   =========|_|==============|___/=/_/_/_/
2:12:45 PM web.1 |   :: Spring Boot ::        (v2.2.2.RELEASE)
2:12:50 PM web.1 |  2020-01-19 14:12:50.528  WARN 22646 --- [           main] o.s.boot.StartupInfoLogger               : InetAddress.getLocalHost().getHostName() took 5004 milliseconds to respond. Please verify your network configuration (macOS machines may need to add entries to /etc/hosts).
2:12:55 PM web.1 |  2020-01-19 14:12:55.540  INFO 22646 --- [           main] net.danef.DanefDictionaryApiApplication  : Starting DanefDictionaryApiApplication on MacBook-Pro.local with PID 22646 (/Users/sametsahin/STS/danef-dictionary-api/target/classes started by sametsahin in /Users/sametsahin/STS/danef-dictionary-api)
2:12:55 PM web.1 |  2020-01-19 14:12:55.543  INFO 22646 --- [           main] net.danef.DanefDictionaryApiApplication  : No active profile set, falling back to default profiles: default
2:12:56 PM web.1 |  2020-01-19 14:12:56.557  INFO 22646 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2:12:56 PM web.1 |  2020-01-19 14:12:56.674  INFO 22646 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 98ms. Found 1 JPA repository interfaces.
2:12:57 PM web.1 |  2020-01-19 14:12:57.252  INFO 22646 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2:12:57 PM web.1 |  2020-01-19 14:12:57.866  INFO 22646 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2:12:57 PM web.1 |  2020-01-19 14:12:57.888  INFO 22646 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2:12:57 PM web.1 |  2020-01-19 14:12:57.889  INFO 22646 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.29]
2:12:58 PM web.1 |  2020-01-19 14:12:58.195  INFO 22646 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2:12:58 PM web.1 |  2020-01-19 14:12:58.195  INFO 22646 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 2575 ms
2:12:58 PM web.1 |  2020-01-19 14:12:58.730  INFO 22646 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2:12:58 PM web.1 |  2020-01-19 14:12:58.972  INFO 22646 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate Core {5.4.9.Final}
2:12:59 PM web.1 |  2020-01-19 14:12:59.226  INFO 22646 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
2:12:59 PM web.1 |  2020-01-19 14:12:59.379  INFO 22646 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2:12:59 PM web.1 |  2020-01-19 14:12:59.385  WARN 22646 --- [           main] o.h.e.j.e.i.JdbcEnvironmentInitiator     : HHH000342: Could not obtain connection to query metadata : Driver org.postgresql.Driver claims to not accept jdbcUrl, ${SPRING_DATASOURCE_URL}
2:12:59 PM web.1 |  2020-01-19 14:12:59.407  INFO 22646 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.PostgreSQLDialect
2:13:00 PM web.1 |  2020-01-19 14:13:00.368  INFO 22646 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2:13:00 PM web.1 |  2020-01-19 14:13:00.397  WARN 22646 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException:
2:13:00 PM web.1 |  >  [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is java.lang.RuntimeException: Driver org.postgresql.Driver claims to not accept jdbcUrl, ${SPRING_DATASOURCE_URL}
2:13:00 PM web.1 |  2020-01-19 14:13:00.413  INFO 22646 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2:13:00 PM web.1 |  2020-01-19 14:13:00.485  INFO 22646 --- [           main] ConditionEvaluationReportLoggingListener :
2:13:00 PM web.1 |  Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2:13:00 PM web.1 |  2020-01-19 14:13:00.500 ERROR 22646 --- [           main] o.s.boot.SpringApplication               : Application run failed
2:13:00 PM web.1 |  org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is java.lang.RuntimeException: Driver org.postgresql.Driver claims to not accept jdbcUrl, ${SPRIN
2:13:00 PM web.1 |  >  G_DATASOURCE_URL}
2:13:00 PM web.1 |      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]
2:13:00 PM web.1 |      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]
2:13:00 PM web.1 |      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]
2:13:00 PM web.1 |      at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]
2:13:00 PM web.1 |      at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]
2:13:00 PM web.1 |      at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]
2:13:00 PM web.1 |      at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]
2:13:00 PM web.1 |      at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1108) ~[spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE]
2:13:00 PM web.1 |      at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:868) ~[spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE]
2:13:00 PM web.1 |      at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE]
2:13:00 PM web.1 |      at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]
2:13:00 PM web.1 |      at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) [spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]
2:13:00 PM web.1 |      at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]
2:13:00 PM web.1 |      at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) [spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]
2:13:00 PM web.1 |      at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) [spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]
2:13:00 PM web.1 |      at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) [spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]
2:13:00 PM web.1 |      at net.danef.DanefDictionaryApiApplication.main(DanefDictionaryApiApplication.java:9) [classes/:na]
2:13:00 PM web.1 |  Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is java.lang.RuntimeException: Driver org.postgresql.Driver claims to not accept jdbcUrl, ${SPRING_DATASOURCE_URL}
2:13:00 PM web.1 |      at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:403) ~[spring-orm-5.2.2.RELEASE.jar:5.2.2.RELEASE]
2:13:00 PM web.1 |      at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:378) ~[spring-orm-5.2.2.RELEASE.jar:5.2.2.RELEASE]
2:13:00 PM web.1 |      at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) ~[spring-orm-5.2.2.RELEASE.jar:5.2.2.RELEASE]
2:13:00 PM web.1 |      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1855) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]
2:13:00 PM web.1 |      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1792) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]
2:13:00 PM web.1 |      ... 16 common frames omitted
2:13:00 PM web.1 |  Caused by: java.lang.RuntimeException: Driver org.postgresql.Driver claims to not accept jdbcUrl, ${SPRING_DATASOURCE_URL}
2:13:00 PM web.1 |      at com.zaxxer.hikari.util.DriverDataSource.<init>(DriverDataSource.java:110) ~[HikariCP-3.4.1.jar:na]
2:13:00 PM web.1 |      at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:320) ~[HikariCP-3.4.1.jar:na]
2:13:00 PM web.1 |      at com.zaxxer.hikari.pool.PoolBase.<init>(PoolBase.java:109) ~[HikariCP-3.4.1.jar:na]
2:13:00 PM web.1 |      at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:108) ~[HikariCP-3.4.1.jar:na]
2:13:00 PM web.1 |      at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-3.4.1.jar:na]
2:13:00 PM web.1 |      at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final]
2:13:00 PM web.1 |      at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:180) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final]
2:13:00 PM web.1 |      at org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl.getIsolatedConnection(DdlTransactionIsolatorNonJtaImpl.java:43) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final]
2:13:00 PM web.1 |      at org.hibernate.tool.schema.internal.exec.ImprovedExtractionContextImpl.getJdbcConnection(ImprovedExtractionContextImpl.java:60) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final]
2:13:00 PM web.1 |      at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.extractMetadata(SequenceInformationExtractorLegacyImpl.java:40) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final]
2:13:00 PM web.1 |      at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.initializeSequences(DatabaseInformationImpl.java:65) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final]
2:13:00 PM web.1 |      at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.<init>(DatabaseInformationImpl.java:59) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final]
2:13:00 PM web.1 |      at org.hibernate.tool.schema.internal.Helper.buildDatabaseInformation(Helper.java:155) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final]
2:13:00 PM web.1 |      at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:96) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final]
2:13:00 PM web.1 |      at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:184) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final]
2:13:00 PM web.1 |      at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:73) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final]
2:13:00 PM web.1 |      at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:320) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final]
2:13:00 PM web.1 |      at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:462) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final]
2:13:00 PM web.1 |      at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1237) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final]
2:13:00 PM web.1 |      at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58) ~[spring-orm-5.2.2.RELEASE.jar:5.2.2.RELEASE]
2:13:00 PM web.1 |      at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[spring-orm-5.2.2.RELEASE.jar:5.2.2.RELEASE]
2:13:00 PM web.1 |      at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:391) ~[spring-orm-5.2.2.RELEASE.jar:5.2.2.RELEASE]
2:13:00 PM web.1 |      ... 20 common frames omitted
[DONE] Killing all processes with signal  SIGINT
2:13:00 PM web.1 Exited with exit code null

Я пробовал настройка параметров конфигурации в настройках моих приложений на веб-сайте Heroku, но это ничего не изменило.

1 Ответ

0 голосов
/ 19 января 2020

Вы можете использовать переменные Env:

public String getPaperTrailApiToken() {
    String token = System.getenv("PAPERTRAIL_API_TOKEN");

    if (token == null || token.isEmpty()) {
        // default value (if needed)
        token = "default token";
    }

    return token;
}

Если вы хотите внедрить их непосредственно в приложение .properties:

app.token= ${PAPERTRAIL_API_TOKEN}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...