非常に標準的なSpringBootアプリケーション(標準の_application.properties
_フォルダーにある_/src/main/resources
_プロパティファイルを使用)があり、AWS ElasticBeanstalkに「ファットJAR」としてデプロイしています。それは非常にうまく機能しますが、サーバーへの画像のアップロードに問題があります。調査の結果、NGINX構成を微調整する必要があるようです(_client_max_body_size
_を何かに増やして、最大_10MB
_までのアップロードを受け入れることができるようにします)。したがって、_.ebextensions
_フォルダーを_/src/main/resources
_次の内容のファイル( この回答 から取得):-
_files:
"/etc/nginx/conf.d/proxy.conf":
mode: "000755"
owner: root
group: root
content: |
client_max_body_size 20M;
_
ただし、ビルドでmvn
を実行しても、ルートフォルダーに_.ebextensions
_が作成されないため、これに最適なソリューションは何でしょうか。私の_pom.xml
_ファイルは非常に最小限で、現在次のものが含まれています。
_ ...
<packaging>jar</packaging>
....
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.6.RELEASE</version>
</dependency>
</dependencies>
</plugin>
_
前もって感謝します!
@Lorena _<resources> ...
_ XMLを_pom.xml
_に挿入してからサーバーを起動すると、次のようにクラッシュします。-
_2017-03-20 21:40:29.504 WARN 10784 --- [ main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'emailApiSpringBootMail': Unsatisfied dependency expressed through field 'javaMailSender'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.mail.javamail.JavaMailSender' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
2017-03-20 21:40:29.507 INFO 10784 --- [ main] o.Apache.catalina.core.StandardService : Stopping service Tomcat
2017-03-20 21:40:29.533 WARN 10784 --- [ main] o.s.boot.SpringApplication : Error handling failed (Error creating bean with name 'delegatingApplicationListener' defined in class path resource [org/springframework/security/config/annotation/web/configuration/WebSecurityConfiguration.class]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.cache.annotation.ProxyCachingConfiguration': Initialization of bean failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'org.springframework.context.annotation.ConfigurationClassPostProcessor.importRegistry' available)
2017-03-20 21:40:29.637 ERROR 10784 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
Field javaMailSender in com.myapp.server.api.impl.EmailApiSpringBootMail required a bean of type 'org.springframework.mail.javamail.JavaMailSender' that could not be found.
- Bean method 'mailSender' not loaded because AnyNestedCondition 0 matched 2 did not; NestedCondition on MailSenderAutoConfiguration.MailSenderCondition.JndiNameProperty @ConditionalOnProperty (spring.mail.jndi-name) did not find property 'jndi-name'; NestedCondition on MailSenderAutoConfiguration.MailSenderCondition.HostProperty @ConditionalOnProperty (spring.mail.Host) did not find property 'Host'
_
XMLを再度削除すると問題が修正されるため、残念ながらこれは機能しません。
前のセクションで説明した問題は、_<resources>
_を指す新しい_.ebextentions
_が次のように定義された_<resources>
_ブロックをオーバーライドしていたことであるように見えました。
_<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
_
すべてを機能させるために、私はそれをコピーして、次のように最後に追加しました:-
_ <resources>
<resource>
<directory>src/main/resources/ebextensions</directory>
<targetPath>.ebextensions</targetPath>
<filtering>true</filtering>
</resource>
<!-- Followed is copied from `spring-boot-starter-parent.pom` -->
<resource>
<directory>${basedir}/src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/application*.yml</include>
<include>**/application*.properties</include>
</includes>
</resource>
<resource>
<directory>${basedir}/src/main/resources</directory>
<excludes>
<exclude>**/application*.yml</exclude>
<exclude>**/application*.properties</exclude>
</excludes>
</resource>
</resources>
_
皆さんの助けに感謝します!
Lorena Salamancaによって提案された解決策 JARのSpring Boot + Elastic Beanstalk .ebextensions 私には機能しません...:\
私のソリューションはSpring1.5.3.RELEASEで動作します
プロジェクトのルートに.ebextensionsを追加し、プラグインセクションの最後にこのスニペットを追加します。
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<id>prepare</id>
<phase>package</phase>
<configuration>
<tasks>
<unzip src="${project.build.directory}/${project.build.finalName}.jar" dest="${project.build.directory}/${project.build.finalName}" />
<copy todir="${project.build.directory}/${project.build.finalName}/" overwrite="false">
<fileset dir="./" includes=".ebextensions/**"/>
</copy>
<!-- <jar jarfile="${project.build.directory}/${project.build.finalName}.jar" basedir="${project.build.directory}/${project.build.finalName}"/>-->
<Zip compress="false" destfile="${project.build.directory}/${project.build.finalName}.jar" basedir="${project.build.directory}/${project.build.finalName}"/>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
このプラグインはantを使用して、Spring Bootによって生成された最終的なjarを解凍し、ルートの.ebextensionsをコピーして、同じ名前で再度Zip(jar)します。テストされ、本番環境で動作しています:)
これは、JARで機能するようにするpomスニペットです。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources/ebextensions</directory>
<targetPath>.ebextensions</targetPath>
<filtering>true</filtering>
</resource>
<!-- Followed is copied from `spring-boot-starter-parent.pom` -->
<resource>
<directory>${basedir}/src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/application*.yml</include>
<include>**/application*.properties</include>
</includes>
</resource>
<resource>
<directory>${basedir}/src/main/resources</directory>
<excludes>
<exclude>**/application*.yml</exclude>
<exclude>**/application*.properties</exclude>
</excludes>
</resource>
</resources>
</build>
。ebextensionsを.warファイルのルートに移動する と同じように機能します。
実はこれにサンプルをアップロードしました repo 。 mvn package
この場合、スタンドアロンのJARが使用されていると思います。 Procfileベースの構成 を使用して、JARと.ebextensions
をZipファイルにバンドルする方が簡単です。
まず、プロジェクトのルートにProcfile
という名前のファイルを次の内容で作成します。
web: Java -jar sample_app-1.0.0.jar
次に、JARとProcfile
ファイルおよび.ebextensions
ディレクトリを含むZipファイルを作成します。
sample_app.Zip
|
|_.ebextensions
| |_ nginx
| |_ conf.d
| |_ proxy.conf
|
|_ sample_app-1.0.0.jar
|_ Procfile
実はスプリングブートjar関連の問題です。 1.2.6バージョンのspring-bootを使用しているため、javamailsenderの問題などのバグがあります。 SpringBootバージョンを1.3.0.releaseよりもアップグレードする必要があります。
この ticket#3478 では、メール送信者の問題がスプリングブートで修正されています。したがって、最新バージョンまたは1.3.0以降のリリースにアップグレードできます。
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>1.3.5.RELEASE</version>
</dependency>
これで問題が解決することを願っています。
表示されるエラーメッセージは、javaMailSenderプロパティが見つかりません。
Pom.xmlに記載されているリソースパスは、デフォルトのリソースルートパスを上書きします。
したがって、JavaMailSenderは、この新しいリソースパスの下でjndi構成またはメールプロパティを探していますが、それを見つけることができません。したがって、エラーが発生します。
spring.mail.jndi-name=mail/testmail
OR
spring.mail.Host=testserver.com
spring.mail.port=25
spring.mail.username=test
spring.mail.password=test123
spring.mail.protocol=smtp
spring.mail.defaultEncoding=UTF-8
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.auth.mechanisms=NTLM
spring.mail.properties.mail.smtp.auth.ntlm.domain=DOMAIN
spring.mail.properties.mail.debug=true