heidsoft / cloud-bigdata-book

write book
56 stars 33 forks source link

spring boot #54

Open heidsoft opened 5 years ago

heidsoft commented 5 years ago

https://tech.asimio.net/2017/10/17/Disabling-Redis-Autoconfiguration-in-Spring-Boot-applications.html

spring: autoconfigure: exclude:

@SpringBootApplication( exclude = { RedisAutoConfiguration.class }

根据进程Id

docker ps -q | xargs docker inspect --format '{{.State.Pid}}, {{.Name}}'|grep 27088

heidsoft commented 5 years ago
本地编译如果想忽略某些模块,可用:mvn -pl '!xxx-proto,!xxx-community,!xxx-common' clean install
本地调试观察应用健康状态详情,可配置:management.endpoint.health.show-details
heidsoft commented 5 years ago

因配置导致jetty 启动后,自动停止

2018-11-22 13:31:27.936 [main] INFO  org.eclipse.jetty.server.Server[374] -- jetty-9.4.10.v20180503; built: 2018-05-03T15:56:21.710Z; git: daa59876e6f384329b122929e70a80934569428c; jvm 1.8.0_151-b12
2018-11-22 13:31:28.736 [main] INFO  org.eclipse.jetty.server.session[365] -- DefaultSessionIdManager workerName=node0
2018-11-22 13:31:28.736 [main] INFO  org.eclipse.jetty.server.session[370] -- No SessionScavenger set, using defaults
2018-11-22 13:31:28.740 [main] INFO  org.eclipse.jetty.server.session[149] -- node0 Scavenging every 660000ms
2018-11-22 13:31:28.825 [main] INFO  org.eclipse.jetty.server.handler.ContextHandler.application[2221] -- Initializing Spring embedded WebApplicationContext
2018-11-22 13:31:31.545 [main] INFO  com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure[56] -- Init DruidDataSource
2018-11-22 13:31:32.728 [main] INFO  com.alibaba.druid.pool.DruidDataSource[928] -- {dataSource-1} inited
2018-11-22 13:31:38.342 [main] INFO  org.eclipse.jetty.server.handler.ContextHandler[788] -- Started o.s.b.w.e.j.JettyEmbeddedWebAppContext@74c79fa2{/,[file:///tmp/jetty-docbase.8451348659669396160.19113/, jar:file:/app.jar!/BOOT-INF/lib/springfox-swagger-ui-2.6.0.jar!/META-INF/resources],AVAILABLE}
2018-11-22 13:31:38.343 [main] INFO  org.eclipse.jetty.server.Server[411] -- Started @32808ms
Thu Nov 22 13:31:39 GMT 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
2018-11-22 13:31:40.326 [main] INFO  org.hibernate.jpa.internal.util.LogHelper[31] -- HHH000204: Processing PersistenceUnitInfo [
        name: default
        ...]
2018-11-22 13:31:40.831 [main] INFO  org.hibernate.Version[45] -- HHH000412: Hibernate Core {5.2.17.Final}
2018-11-22 13:31:40.834 [main] INFO  org.hibernate.cfg.Environment[213] -- HHH000206: hibernate.properties not found
2018-11-22 13:31:41.131 [main] INFO  org.hibernate.annotations.common.Version[66] -- HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
2018-11-22 13:31:42.638 [main] INFO  org.hibernate.dialect.Dialect[157] -- HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
2018-11-22 13:31:53.627 [main] INFO  com.alibaba.druid.pool.DruidDataSource[1823] -- {dataSource-1} closed
2018-11-22 13:31:53.631 [main] INFO  org.eclipse.jetty.server.session[167] -- node0 Stopped scavenging
2018-11-22 13:31:53.634 [main] INFO  org.eclipse.jetty.server.handler.ContextHandler[957] -- Stopped o.s.b.w.e.j.JettyEmbeddedWebAppContext@74c79fa2{/,[file:///tmp/jetty-docbase.8451348659669396160.19113/, jar:file:/app.jar!/BOOT-INF/lib/springfox-swagger-ui-2.6.0.jar!/META-INF/resources],UNAVAILABLE}
heidsoft commented 5 years ago

阿里云日志采集

{
  "inputs": [
    {
      "detail": {
        "BeginLineCheckLength": 10,
        "BeginLineRegex": "\\d+-\\d+-\\d+.*",
        "ExcludeLabel": {},
        "IncludeEnv": {
          "aliyun_logs_xxxx": "stdout"
        },
        "IncludeLabel": {
          "io.kubernetes.pod.namespace": "xxxxx"
        }
      },
      "type": "service_docker_stdout"
    }
  ]
}
heidsoft commented 5 years ago

显示应用监控详情

management.endpoint.health.show-details = Always

HTTP 方法 | 路径 | 描述
GET | /autoconfig | 提供了一份自动配置报告,记录哪些自动配置条件通过了,哪些没通过
GET | /configprops | 描述配置属性(包含默认值)如何注入Bean
GET | /beans | 描述应用程序上下文里全部的Bean,以及它们的关系
GET | /dump | 获取线程活动的快照
GET | /env | 获取全部环境属性
GET | /env/{name} | 根据名称获取特定的环境属性值
GET | /health | 报告应用程序的健康指标,这些值由HealthIndicator的实现类提供
GET | /info | 获取应用程序的定制信息,这些信息由info打头的属性提供
GET | /mappings | 描述全部的URI路径,以及它们和控制器(包含Actuator端点)的映射关系
GET | /metrics | 报告各种应用程序度量信息,比如内存用量和HTTP请求计数
GET | /metrics/{name} | 报告指定名称的应用程序度量值
POST | /shutdown | 关闭应用程序,要求endpoints.shutdown.enabled设置为true
GET | /trace | 提供基本的HTTP请求跟踪信息(时间戳、HTTP头等)
heidsoft commented 5 years ago

事物错误信息

org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect)

由乐观锁引发的问题

当两个不同的事务同时读取到一条数据并进行修改时,这个时候程序就会抛出org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect)异常。

首先介绍一些乐观锁与悲观锁:

  悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。再比如Java里面的同步原语synchronized关键字的实现也是悲观锁。

  乐观锁:顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库提供的类似于write_condition机制,其实都是提供的乐观锁。在Java中java.util.concurrent.atomic包下面的原子变量类就是使用了乐观锁的一种实现方式CAS实现的。

https://stackoverflow.com/questions/8645694/row-was-updated-or-deleted-by-another-transaction-or-unsaved-value-mapping-was https://www.cnblogs.com/qjjazry/p/6581568.html http://skyuck.iteye.com/blog/1833099