キャッシュとして動作するRedisインスタンスに接続するSpring起動アプリケーションがあります。私はDEV環境にいるとき、私は次のようにあります環境変数と@ValueはSpring起動時には同時に動作しません
---
spring:
profiles: default
redis:
host: localhost
port: 6379
そして、私のキャッシュ構成クラスは、このようなものです:
製造において@Configuration
@EnableCaching
public class CacheConfiguration {
@Value("${redis.host}")
String redisHost;
@Value("${redis.port}")
int redisPort;
、このアプリはDockerizedある、と私はdocker-compose.yml
を以下していますファイル:
redis:
image: tutum/redis
ports:
- "6379:6379"
volumes:
- /data
app:
build: .
ports:
- "8080:8080"
links:
- redis
そしてapplication.yml
です:
---
spring:
profiles: docker
redis:
host: redis
port: 6379
ドッカー上のアプリを起動するには、私は-Dspring.profiles.active=docker
で実行されますが、アプリが起動されると、次のエラーが起こる:
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private int com.inkdrop.config.cache.CacheConfiguration.redisPort; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert value of type [java.lang.String] to required type [int]; nested exception is java.lang.NumberFormatException: For input string: "tcp://172.17.0.3:6379"
何らかの理由で、春ブーツはtcp://172.17.0.3:6379
としてredis.port
を読んでいます。そこでテストの提案では、CacheConfiguration
クラスの@Value
注釈を削除し、手動でredis
をホストに、6379
をポートとして設定しました。環境変数と@Value
を使用しているときのように、Springは紛失します。誰でもアイデアはありますか? name_PORTフォーマットを使用して、容器、例えばの完全URLを表す環境変数を作成し
Compose uses Docker links to expose services containers to one another. Each linked container injects a set of environment variables, each of which begins with the uppercase name of the container.
ドッカー作曲:Docker documentationに基づい
あなたはどの春ブートバージョンを使用していますか?また、私はドッカーの作成ファイル自体に環境変数を設定しようとします: 'environment:redis.port = 6379'、何が起こるか見てください。 –
1.3.4を使用しています。私はそれを試してみます –