Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Externalizar váriaveis de ambiente, no Windows com aplicações tipo .WAR

Olá,

Tenho uma aplicação que quero utilizar a exportação dela do tipo .war com suas váriaveis externalizadas. Segue o arquivo de propriedades da aplicação:

spring.jpa.hibernate.ddl-auto=update
spring.datasource.url={TESTE_DATABASE_URL}
spring.datasource.username={TESTE_USER_DATABASE}
spring.datasource.password={TESTE_PASSWORD_DATABASE}
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

entretanto, ao executar a aplicação, ainda no eclipse, obtenho o seguinte erro:

java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, {TESTE_DATABASE_URL}
    at com.zaxxer.hikari.util.DriverDataSource.<init>(DriverDataSource.java:110) ~[HikariCP-4.0.3.jar:na]
    at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:331) ~[HikariCP-4.0.3.jar:na]
    at com.zaxxer.hikari.pool.PoolBase.<init>(PoolBase.java:114) ~[HikariCP-4.0.3.jar:na]
    at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:108) ~[HikariCP-4.0.3.jar:na]
    at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-4.0.3.jar:na]
    at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) ~[hibernate-core-5.6.9.Final.jar:5.6.9.Final]
    at 

entretanto o no meu sistema operacional eu já coloquei as variaveis de ambiente. Para criar as variaveis de ambiente utilizei os seguintes comandos (também fiz para as outras variaveis)

Para Windows:

setx TESTE_DATABASE_URL "jdbc:mysql://localhost:3306/teste"   /M

Para Linux:

CMD com o comando echo %TESTE_DATABASE_URL%

o que devo fazer?

2 respostas
solução!

Olá! Tudo bem? Faltou o símbolo $ antes das chaves na declaração das variáveis no application.properties:

spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=${TESTE_DATABASE_URL}
spring.datasource.username=${TESTE_USER_DATABASE}
spring.datasource.password=${TESTE_PASSWORD_DATABASE}
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

Pode também estar acontecendo um problema com as variáveis de ambiente no sistema, caso você não queira colocar diretamente no arquivo application.properties, você pode passar por linha de comando na hora que você for executar a aplicação:

# Valores de exemplo
java -jar projeto.jar --spring.datasource.url=localhost:3306 --spring.datasource.username=root --spring.datasource.password=senha

O comando acima funcionaria com uma aplicação compilada em .jar, porém também deve funcionar com .war, basta executar via linha de comando do jeito que você costuma fazer, somente adicionando os argumentos com esse --. Perceba que o valor das variáveis de ambiente é acessado do jeito --spring.datasource.password quando fora do código, na hora de dar valor a elas. Mas dentro do código, acessamos do jeito ${TESTE_PASSWORD_DATABASE}, através da anotação @Value do spring:

@Value("${TESTE_PASSWORD_DATABASE}")
private String databasePassword;

Espero ter ajudado!

Olá, Breno

Basicamente foi um erro de dedo mesmo, faltou o "$" (cifrão) para que as variaveis fossem reconhecidas. Muito obrigado.

Att,

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software