我不是Spring的专家,而且它是黑盒子,即使使用Spring的文档,我也很难自己解决问题.有时,我只是不知道我在寻找什么才能开始我的搜索......
在我的Spring Boot应用程序中,我试图弄清楚如何为我的所有RestControllers配置一个唯一的url前缀.
我真正想要的就是从根上下文"/"中提供我的静态内容,但是可以从不同的上下文访问我的RestController端点,比如说"/ api/*".
我知道如何通过application.properties更改应用程序的默认上下文,但这不是我所追求的.当谈到servlet,映射等时,我在这里表现出我的无知,因为我说我正试图为两种不同类型的内容获得两种不同的上下文.
我的应用程序在我们的 SQL Server 数据库中的一个繁忙的表上遇到锁争用。我们的 DBA 团队建议我遵循其他团队的配置,这些团队的默认事务隔离级别设置为 READ_UNCOMMITTED。然后,据说他们将隔离级别设置回 READ_COMMITTED 以进行插入和更新。一段时间以来,我一直反对这样做,因为这感觉像是逃避,而且我已经看到到处都是反对使用 READ_UNCOMMITTED 的警告。然而,我的手现在被绑住了。
我正在使用 Spring Boot、HikariCP 并使用 Spring Data 存储库与我的 SQL Server 数据库进行交互。我允许 Spring 从我的 application.properties 自动配置我的数据源,并且几乎没有其他配置。
我设法在我的应用程序属性中设置了我的默认事务隔离级别,如下所示:
spring.datasource.hikari.transaction-isolation=TRANSACTION_READ_UNCOMMITTED
Run Code Online (Sandbox Code Playgroud)
我已经能够通过查询事务日志、从事务条目中获取 SPID 并运行以下查询来验证这是否有效,该查询现在返回“ReadUncommitted”:
SELECT CASE transaction_isolation_level
WHEN 0 THEN 'Unspecified'
WHEN 1 THEN 'ReadUncommitted'
WHEN 2 THEN 'ReadCommitted'
WHEN 3 THEN 'Repeatable'
WHEN 4 THEN 'Serializable'
WHEN 5 THEN 'Snapshot' END AS TRANSACTION_ISOLATION_LEVEL
FROM sys.dm_exec_sessions
where session_id = @@SPID
Run Code Online (Sandbox Code Playgroud)
但是,在我的一项服务中,我试图将隔离级别覆盖回 READ_COMMITTED,但它没有生效。
鉴于以下情况:
来自 application.properties 的选择
spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.transaction-isolation=TRANSACTION_READ_UNCOMMITTED
Run Code Online (Sandbox Code Playgroud)
配置文件
@Configuration
@EnableJpaRepositories("my.project.repository")
@EntityScan(basePackages = …Run Code Online (Sandbox Code Playgroud) 无论怎么想,我们小团队中的两个人都不是 AWS 专家。我们有几个 Spring Boot 应用程序通过 Bitbucket Pipelines 部署到 AWS EC2 实例。这些是单实例、自动扩展(最多 2 个实例)Elastic Beanstalk 应用程序。
太长了;博士
为什么我的单实例自动扩展(很少实际触发)Spring Boot 应用程序需要几秒钟才能启动,而每个环境通过 Bitbucket Pipelines 和 Elastic Beanstalk 进行部署需要花费 10 分钟以上?我们正在使用不可变的部署策略,看起来大部分时间都花在等待运行状况检查通过。如何减少部署时间?
--
以下是实例之一的“滚动更新和部署”配置:
Batch size: 100%
Batch size:
Command timeout: 600
Deployment policy: Immutable
Healthy threshold: Ok
Ignore health check: disabled
Minimum capacity:
Rolling update type: Immutable
Rolling updates: enabled
Run Code Online (Sandbox Code Playgroud)
我找不到任何真正的选项来配置自动缩放应用程序的运行状况检查。我找到了自动缩放组,并检查了它们的运行状况检查设置,但选项非常有限。目前,它们仅设置为 EC2 运行状况检查类型(不检查 ELB),宽限期为 0 秒。
阅读https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-healthchecks.html后,我担心在某个地方,它设置了类似的默认值,30 秒的间隔,至少 10 次成功的运行状况检查为了使实例被宣布为健康。
在哪里可以查看或配置自动扩展、不可变部署、单实例应用程序所使用的运行状况检查的更详细设置?
deployment amazon-web-services autoscaling amazon-elastic-beanstalk bitbucket-pipelines
spring-boot ×2
autoscaling ×1
deployment ×1
hikaricp ×1
java ×1
servlets ×1
spring ×1
spring-data ×1
spring-mvc ×1
sql-server ×1
transactions ×1