Migration Guide 5.5.0_Cloud Extension_ja - terasolunaorg/terasoluna-gfw GitHub Wiki
-
1. 5.4.1から5.5.0への移行ガイド
- 1.1. オンライン版クラウド拡張1.0.1から1.1.0への変更
-
1.2. オンライン版クラウド拡張1.0.1から1.1.0への移行手順
- 1.2.1. [Step 1] 依存ライブラリを更新
- 1.2.2. [Step 2] クラスパスの修正
- 1.2.3. [Step 3] SecurityAutoConfigurationクラスの除外対応
- 1.2.4. [Step 4] WebMvcMetricsAutoConfigurationクラスの除外対応
- 1.2.5. [Step 5] ActuatorのProduction-ready化に伴う修正
- 1.2.6. [Step 6] ResourcePatternResolverの定義方法変更に伴う修正
- 1.2.7. [Step 7] CloudWatchMetricPropertiesの仕様変更に伴う修正
- 1.2.8. [Step 8] アーティファクトID変更に伴うdependency定義の修正
- 1.2.9. [Step 9] Spring Securityとの併用で発生するタイムアウト検知のバグ修正
- 1.2.10. [Step 10] spring-boot-starter-data-redisの依存ライブラリ変更に伴う修正
- 1.2.11. [Step 11] Bean定義変更に伴う修正
- 1.2.12. [Step 12] キャッシュアノテーションのcacheNames属性の仕様変更に伴う修正
- 1.2.13. [Step 13] CrudRepositoryの仕様変更に伴う修正
- 1.2.14. [Step 14] Spring Bootと互換性のあるversionに修正
- 1.2.15. [Step 15] Amazon SQSがサポートするJMSのversionに合わせた修正
5.5.0への変更に伴い、オンライン版クラウド拡張が1.0.1から1.1.0へと変更となりました。
主な変更点は以下の通りです。
-
spring-cloud-dependenciesをFinchley.SR1へ更新
移行手順は、以下の通りです。
Note凡例
Required : 手順の適用は必須
Required by case : 手順の適用は条件付きで必須
Optional : 手順の適用を推奨 (必要に応じて手順の適用を実施)
- : 手順の適用は必要なし
[全般]
ステップ | 手順 | Your Projects |
---|---|---|
1. |
依存ライブラリを更新 |
Required |
[Spring Boot]
ステップ | 手順 | Your Projects |
---|---|---|
2. |
クラスパスの修正 |
Required |
3. |
SecurityAutoConfigurationクラスの除外対応 |
Required by case |
4. |
WebMvcMetricsAutoConfigurationクラスの除外対応 |
Required by case |
5. |
ActuatorのProduction-ready化に伴う修正 |
Required by case |
[Spring Cloud AWS]
ステップ | 手順 | Your Projects |
---|---|---|
6. |
ResourcePatternResolverの定義方法変更に伴う修正 |
Required by case |
7. |
CloudWatchMetricPropertiesの仕様変更に伴う修正 |
Required by case |
[Spring Session]
ステップ | 手順 | Your Projects |
---|---|---|
8. |
アーティファクトID変更に伴うdependency定義の修正 |
Required by case |
9. |
Spring Securityとの併用で発生するタイムアウト検知のバグ修正 |
Required by case |
[Spring Data]
ステップ | 手順 | Your Projects |
---|---|---|
10. |
spring-boot-starter-data-redisの依存ライブラリ変更に伴う修正 |
Required by case |
11. |
Bean定義変更に伴う修正 |
Required by case |
12. |
cacheNamesアノテーションの仕様変更に伴う修正 |
Required by case |
13. |
CrudRepositoryの仕様変更に伴う修正 |
Required by case |
[Spring Data DynamoDB]
ステップ | 手順 | Your Projects |
---|---|---|
14. |
Spring Bootと互換性のあるversionに修正 |
Required by case |
[Spring JMS]
ステップ | 手順 | Your Projects |
---|---|---|
15. |
Amazon SQSがサポートするJMSのversionに合わせた修正 |
Required by case |
[手順が必要なケース]
この手順の適用は必須です。
[修正方法]
親プロジェクトのpomファイルについて spring-cloud-dependencies
の version
を Finchley.SR1
に修正してください。
-
(
$YOUR_MULTIPLE_PROJECT_ROOT/pom.xml
)
<!-- omitted -->
<dependencyManagement>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR1</version> <!-- ### 修正箇所 ### -->
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencyManagement>
<!-- omitted -->
[手順が必要なケース]
この手順の適用は必須です。
[修正方法]
TERASOLUNA Server Framework
の更新に伴い、 WebMvcAutoConfiguration
と SpringBootServletInitializer
のクラスパスが変更となりました。具体的には以下のように修正してください。
<!-- omitted -->
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration;
import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration; <!-- ### 修正箇所 ### -->
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; <!-- ### 修正箇所 ### -->
import org.springframework.context.annotation.ImportResource;
@ImportResource({ "classpath*:META-INF/spring/applicationContext.xml", "classpath*:META-INF/spring/spring-security.xml",
"classpath*:/META-INF/spring/spring-mvc.xml"})
@EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class,
JmxAutoConfiguration.class, WebMvcAutoConfiguration.class })
public class Bootstrap extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
setRegisterErrorPageFilter(false);
return application.sources(Bootstrap.class);
}
}
<!-- omitted -->
[手順が必要なケース]
Spring Securityを利用する場合、この手順の適用は必須です。
[修正方法]
TERASOLUNA Server Framework
の更新に伴い、 Spring SecurityのBean定義をXMLで正しく定義していても SecurityAutoConfiguration
が有効となりBean定義エラーとなるバグが発生します。
本事象を回避するために以下のように SecurityAutoConfiguration
をexcludeしてください。
<!-- omitted -->
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration;
import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ImportResource;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; <!-- ### 修正箇所 ### -->
@ImportResource({ "classpath*:META-INF/spring/applicationContext.xml", "classpath*:META-INF/spring/spring-security.xml",
"classpath*:/META-INF/spring/spring-mvc.xml"})
@EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class,
JmxAutoConfiguration.class, WebMvcAutoConfiguration.class,
SecurityAutoConfiguration.class }) <!-- ### 修正箇所 ### -->
public class Bootstrap extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
setRegisterErrorPageFilter(false);
return application.sources(Bootstrap.class);
}
}
<!-- omitted -->
[手順が必要なケース]
ヘルスチェックを利用する場合、この手順の適用は必須です。
[修正方法]
TERASOLUNA Server Framework
の更新に伴い、ヘルスチェックを利用している( Spring Boot Actuator
が有効である)場合、 CharacterEncodingFilter
よりも先に WebMvcMetricsFilter
が適用されてしまい正しくエンコードできないバグが発生します。 本事象を回避するために以下のように WebMvcMetricsAutoConfiguration
をexcludeしてください。
<!-- omitted -->
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration;
import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ImportResource;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.metrics.web.servlet.WebMvcMetricsAutoConfiguration; <!-- ### 修正箇所 ### -->
@ImportResource({ "classpath*:META-INF/spring/applicationContext.xml", "classpath*:META-INF/spring/spring-security.xml",
"classpath*:/META-INF/spring/spring-mvc.xml"})
@EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class,
JmxAutoConfiguration.class, WebMvcAutoConfiguration.class,
SecurityAutoConfiguration.class, WebMvcMetricsAutoConfiguration }) <!-- ### 修正箇所 ### -->
public class Bootstrap extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
setRegisterErrorPageFilter(false);
return application.sources(Bootstrap.class);
}
}
<!-- omitted -->
[手順が必要なケース]
ヘルスチェックを利用する場合、この手順の適用は必須です。
[修正方法]
TERASOLUNA Server Framework
の更新に伴い、Actuatorのプロパティ定義が変更となりました。base-pathを変更する際は management.endpoints.web.base-path
に設定してください。
-
(
$YOUR_MULTIPLE_PROJECT_ROOT/projectName-web/src/main/resources/application.xml
)
<!-- omitted -->
spring:
application:
name: xxx
management:
endpoints:
web:
base-path: /management <!-- ### 修正箇所 ### -->
<!-- omitted -->
「Spring Boot Actuatorの処理結果ステータス」で詳細情報を取得するために management.endpoint.health.show-details
に ALWAYS
を設定してください。
-
(
$YOUR_MULTIPLE_PROJECT_ROOT/projectName-web/src/main/resources/application.xml
)
<!-- omitted -->
spring:
application:
name: xxx
management:
endpoints:
web:
base-path: /management
endpoint:
health:
show-details: ALWAYS <!-- ### 修正箇所 ### -->
<!-- omitted -->
[手順が必要なケース]
Spring Cloud AWSを使用したS3内のAntパターンによるオブジェクト検索を利用する場合、この手順の適用は必須です。
[修正方法]
spring-cloud-dependencies
の更新に伴い、S3内のAntパターンによるオブジェクト検索を行う際の ResourcePatternResolver
の定義方法が変更となりました。 以下のように resourcePatternResolver
に対し PathMatchingSimpleStorageResourcePatternResolver
でラップするよう修正してください。
<!-- omitted -->
private ResourcePatternResolver resourcePatternResolver;
@Inject <!-- ### 追加箇所ここから ### -->
public void setupResolver(ApplicationContext applicationContext, AmazonS3 amazonS3){
this.resourcePatternResolver = new PathMatchingSimpleStorageResourcePatternResolver(amazonS3, applicationContext);
} <!-- ### 追加箇所ここまで ### -->
<!-- omitted -->
Resource[] result = resourcePatternResolver.getResources("s3://myBucket/*");
<!-- omitted -->
[手順が必要なケース]
カスタムメトリクスの CloudWatchMetricProperties
を利用する場合、この手順の適用は必須です。
[修正方法]
spring-cloud-dependencies
の更新に伴い、カスタムメトリクスの実装例で利用していた CloudWatchMetricProperties
について、クラスパスやクラス名、取得できるプロパティの変更が発生しています。アプリケーションのプロパティを取得することでも同様処理が可能なことからオンライン版クラウド拡張では CloudWatchMetricProperties
の利用を廃止しました。これに伴い、カスタムメトリクスの実装例を以下のようにアプリケーションのプロパティから取得するよう修正しています。
<!-- omitted -->
@ConfigurationProperties(prefix = "custom.metric")
public class CloudWatchMetricSender implements InitializingBean {
@Value("${cloud.aws.cloudwatch.region:}")
String region;
@Value("${spring.application.name:autoScalingGroupName}")
String autoScalingGroupName;
@Value("${cloud.aws.cloudwatch.namespace:}") <!-- ### 修正箇所 ### -->
String namespace;
private AmazonCloudWatch amazonCloudWatch;
private String instanceId;
<!-- omitted -->
@Scheduled(fixedRate = 5000)
public void sendCloudWatch() {
<!-- omitted -->
PutMetricDataRequest request = new PutMetricDataRequest()
.withNamespace(namespace) <!-- ### 修正箇所 ### -->
.withMetricData(
// Used
new MetricDatum().withDimensions(InstanceIdDimension,
AutoScalingGroupNameDimension).withMetricName(
"HeapMemory.Used").withUnit(
StandardUnit.Bytes.toString()).withValue(
<!-- omitted -->
[手順が必要なケース]
Spring Sessionを利用する場合、この手順の適用は必須です。
[修正方法]
TERASOLUNA Server Framework
の更新に伴い、 spring-session
のアーティファクトIDが変更となりました。具体的には以下のように修正してください。
-
(
$YOUR_MULTIPLE_PROJECT_ROOT/projectName-web/pom.xml
)
<!-- omitted -->
<dependencies>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-core</artifactId> <!-- ### 修正箇所 ### -->
</dependency>
</dependencies>
<!-- omitted -->
[手順が必要なケース]
Spring SessionとSpring Securityを併用する場合、この手順の適用は必須です。
[修正方法]
TERASOLUNA Server Framework
の更新に伴い、 spring-session-core
の version
が 2.0.5.RELEASE
へ更新されましたが、Spring Securityと併用した場合にセッションタイムアウトを検知できないバグが発生します。本事象を回避するため以下のように version
を 2.1.1.RELEASE
に指定してください。
-
(
$YOUR_MULTIPLE_PROJECT_ROOT/projectName-web/pom.xml
)
<!-- omitted -->
<dependencies>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-core</artifactId>
<version>2.1.1.RELEASE</version> <!-- ### 修正箇所 ### -->
</dependency>
</dependencies>
<!-- omitted -->
[手順が必要なケース]
spring-boot-starter-data-redis
を利用している場合、この手順の適用は必須です。
[修正方法]
TERASOLUNA Server Framework
の更新に伴い、セッション外部管理およびキャッシュの抽象化で定義する依存ライブラリが以下のように変更となります。
セッション外部管理を利用する場合は以下のように修正してください。
-
(
$YOUR_MULTIPLE_PROJECT_ROOT/projectName-web/pom.xml
)
<!-- omitted -->
<dependencies>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
</dependencies>
<!-- omitted -->
キャッシュの抽象化を利用する場合は以下のように修正してください。(または上記と同様でも動作します。)
-
(
$YOUR_MULTIPLE_PROJECT_ROOT/projectName-web/pom.xml
)
<!-- omitted -->
<dependencies>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
</dependencies>
<!-- omitted -->
[手順が必要なケース]
キャッシュの抽象化を利用する場合、この手順の適用は必須です。
[修正方法]
TERASOLUNA Server Framework
の更新に伴い、Redisを使用したキャッシュマネージャのBean定義が変更となりました。キャッシュマネージャを利用する際は以下のようにBean定義を修正してください。
-
(
$YOUR_MULTIPLE_PROJECT_ROOT/projectName-web/src/main/resources/META-INF/spring/functionaltest-env.xml
)
<!-- omitted -->
<bean id="cacheManager"
class="org.springframework.data.redis.cache.RedisCacheManager"
factory-method="create"
c:connection-factory-ref="redisConnectionFactory"
p:transaction-aware="true" />
<bean id="redisConnectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
p:host-name="${spring.redis.host}" p:port="${spring.redis.port}" />
<!-- omitted -->
また、上記修正に伴いプロパティ(yml)に以下を追加してください。
-
(
$YOUR_MULTIPLE_PROJECT_ROOT/projectName-web/src/main/resources/application.xml
)
<!-- omitted -->
spring:
redis:
host: 【RedisのIP】
port: 【Redisのポート】
<!-- omitted -->
[手順が必要なケース]
キャッシュの抽象化を利用する場合、この手順の適用は必須です。
[修正方法]
TERASOLUNA Server Framework
の更新に伴い、 @CacheConfig
の cacheNames
属性を利用した際のキャッシュデータにキープレフィックスが付与されるようになりました。例えば、以下のように @CacheConfig
と @Cacheable
を設定している場合、 キャッシュキーは members::member/【#customerNo】
となります。
// omitted...
@CacheConfig(cacheNames = "members")
public class MemberUpdateServiceImpl implements MemberUpdateService {
@Transactional(readOnly = true)
@Cacheable(key = "'member/' + #customerNo")
public Member findMember(String customerNo) throws IOException {
// omitted...
}
// omitted...
}
[手順が必要なケース]
リポジトリクラスを CrudRepository
のサブインタフェースとして実装する場合、この手順の適用は必須です。
[修正方法]
TERASOLUNA Server Framework
の更新に伴い、 CrudRepository
の findOne
メソッドが findById
に変更となりました。 この変更に伴い CrudRepository
を継承しているクラスは以下のように修正する必要があります。
import org.socialsignin.spring.data.dynamodb.repository.EnableScan;
import org.springframework.data.repository.CrudRepository;
import com.example.xxx.domain.common.shard.model.ShardingAccount;
@EnableScan
public interface AccountShardKeyRepository extends CrudRepository<ShardingAccount, String> {
@Override
@Cacheable(key = "'shardid/' + #a0")
Optional<ShardingAccount> findById(String id); <!-- ### 修正箇所 ### -->
<!-- omitted -->
}
AccountShardKeyRepository
の変更に伴い、エンティティクラス ShardingAccount
を以下のように修正する必要があります。
// omitted...
@DynamoDBTable(tableName = "ShardAccount")
public class ShardingAccount implements Serializable {
private static final long serialVersionUID = 1L;
@DynamoDBHashKey(attributeName = "user_id")
private String id; <!-- ### 修正箇所 ### -->
// omitted...
findById
メソッドの変更に伴い、インターフェース実装クラス AccountShardKeyRepository
を以下のように修正する必要があります。
// omitted...
@CacheConfig(cacheNames = "shardids")
@EnableScan
public interface AccountShardKeyRepository
extends
CrudRepository<ShardingAccount, String> {
@Override
@Cacheable(key = "'shardid/' + #a0")
Optional<ShardingAccount> findById(String id); <!-- ### 修正箇所 ### -->
}
AccountShardKeyRepository
の変更に伴い、シャーディングインターセプタクラス AccountShardInterceptor
を以下のように修正する必要があります。
// omitted...
public class AccountShardInterceptor implements MethodInterceptor, InitializingBean {
// omitted...
@Override
public Object invoke(MethodInvocation invocation) throws Throwable {
String beforeKey = dataSourceLookupKeyHolder.get();
String dataSourceKey = null;
String account = shardAccountHelper.getAccountValue(invocation);
if (null != account) {
Optional<ShardingAccount> shardingAccount = accountShardKeyRepository <!-- ### 修正箇所 ### -->
.findById(acccount);
if (shardingAccount != null) {
dataSourceKey = shardingAccount.get().getDataSourceKey(); <!-- ### 修正箇所 ### -->
}
}
// omitted...
ShardingAccount
の変更に伴い、サービスクラス MemberRegisterServiceImpl
を以下のように修正する必要があります。
@Service
public class MemberRegisterServiceImpl implements MemberRegisterService {
// omitted...
@Inject
private ShardKeyResolver shardKeyResolver;
@Override
@Transactional
public Member register(Member member) {
// omitted...
int insertMemberCount = memberRepository.insert(member);
ShardingAccount shardingAccount = new ShardingAccount();
shardingAccount.setId(member.getCustomerNo()); <!-- ### 修正箇所 ### -->
shardingAccount.setDataSourceKey(shardKeyResolver.resolveShardKey(member.getCustomerNo()));
accountShardKeyRepository.save(shardingAccount);
return member;
}
}
[手順が必要なケース]
DynamoDBを利用する場合、この手順の適用は必須です。
[修正方法]
TERASOLUNA Server Framework
の更新に伴い、 spring-data-dynamodb
の version
を 5.0.3
に変更する必要があります。
-
(
$YOUR_MULTIPLE_PROJECT_ROOT/projectName-web/pom.xml
)
<!-- omitted -->
<dependency>
<groupId>com.github.derjust</groupId>
<artifactId>spring-data-dynamodb</artifactId>
<version>5.0.3</version> <!-- ### 修正箇所 ### -->
</dependency>
<!-- omitted -->
[手順が必要なケース]
Amazon SQSとSpring JMSを併用する場合、この手順の適用は必須です。
[修正方法]
TERASOLUNA Server Framework
の更新に伴い、 spring-jms
の version
が 5.0.8.RELEASE
に更新されます。しかし、オンライン版クラウド拡張で紹介しているAmazon SQSではJMS1.1までしかサポートしていないため、 spring-jms
の version
を 4.3.14.RELEASE
に指定する必要があります。
-
(
$YOUR_MULTIPLE_PROJECT_ROOT/projectName-web/pom.xml
)
<!-- omitted -->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>4.3.14.RELEASE</version> <!-- ### 修正箇所 ### -->
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>amazon-sqs-java-messaging-lib</artifactId>
<version>1.0.1</version>
</dependency>
</dependencies>
<!-- omitted -->