问题一:为什么Seata的springcloud服务中引入dubbo后导致大量bean被提前实例化?
为什么Seata的springcloud服务中引入dubbo后导致大量bean被提前实例化?
trationDelegate$BeanPostProcessorChecker : Bean 'feign.client-org.springframework.cloud.openfeign.FeignClientProperties' of type [org.springframework.cloud.openfeign.FeignClientProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
参考答案:
Seata 的 Spring Cloud 服务中引入 Dubbo 后导致大量 Bean 被提前实例化,是因为 Dubbo 使用 Javassist 动态代理实现了 RPC 代理,而 Javassist 在代理类中会生成 private static final Method[] methods 字段,用于存储被代理类的方法列表,这个字段会在代理类被加载时初始化,如果被代理类有大量的方法,则 Javassist 会生成大量的方法字段,从而导致大量 Bean 被提前实例化。
为了解决这个问题,可以将 Dubbo 的 provider 配置项设置为 false,这样 Dubbo 就不会使用 Javassist 动态代理,也就不会生成 private static final Method[] methods 字段,从而避免大量 Bean 被提前实例化。
另外,也可以使用 Spring Cloud 的 @DubboReference 注解来引入 Dubbo 的服务,这样 Spring Cloud 会使用 SpringProxyFactory 来创建 Dubbo 代理,SpringProxyFactory 不会使用 Javassist 动态代理,也就不会生成 private static final Method[] methods 字段,从而避免大量 Bean 被提前实例化。
关于本问题的更多回答可点击进行查看:
https://developer.aliyun.com/ask/541811?spm=a2c6h.12873639.article-detail.82.456d4378DrHxEF
问题二:我整合1.3的Seata发现不配置DataSourceProxy起不来.是这样的么?
我整合1.3的Seata发现不配置DataSourceProxy起不来.是这样的么?
参考答案:
正确的做法是,不配置 DataSourceProxy 的时候,需要在配置文件中设置 seata.enable-auto-data-source-proxy=false,这样 seata 不会自动创建 DataSourceProxy。
如果不设置 seata.enable-auto-data-source-proxy=false,座位还会自动创建 DataSourceProxy,但如果 DataSource 是存在的,那么就会把 seata 的 DataSourceProxy 覆盖掉,导致 seata 无法正常使用。
所以,如果不配置 DataSourceProxy 的话,需要设置 seata.enable-auto-data-source-proxy=false 来禁止 seata 自动创建 DataSourceProxy。
关于本问题的更多回答可点击进行查看:
https://developer.aliyun.com/ask/541810?spm=a2c6h.12873639.article-detail.83.456d4378DrHxEF
问题三:怎么在 docker seata-server 没有看到有这个目录?
怎么在 docker seata-server 没有看到有这个目录?
参考答案:
Seata 的 docker 镜像中,文件目录 /seata/config 是默认不创建的。如果需要使用 config 配置文件,可以通过以下方式创建:
在 docker 容器中运行 seata-server 命令时,指定 --config 参数。例如:
docker run -d --name seata-server -e SEATA_CONFIG_PATH="/seata/config" seata/seata-server:v1.1.0
在 docker 容器中手动创建 config 目录。例如:
mkdir /seata/config
关于本问题的更多回答可点击进行查看:
https://developer.aliyun.com/ask/541809?spm=a2c6h.12873639.article-detail.84.456d4378DrHxEF
问题四:Seata这问题什么原因?
Seata这问题什么原因?
Field not equals, name in_date, old value 2018-01-01T00:00, new value 2018-01-01 00:00:00.0
参考答案:
这个问题是由于 Spring Data JPA 在插入一条记录时,会将字符串类型的日期转换成 UTC 时区的时间戳。如果您使用的是非 UTC 时区,那么在查询这条记录时,就会出现 Field not equals 的错误。
要解决这个问题,您可以使用 Spring Data JPA 的 @Convert 注解,将字符串类型的日期转换成您想要的时区。例如,您可以使用以下代码来将字符串类型的日期转换成 GMT+8 时区的时间戳:
@Convert(converter = StringToDateConverter.class)
@Column(nullable = false)
private Date inDate;
public static class StringToDateConverter implements AttributeConverter {
@Override public Date convertToDatabaseColumn(String date) { return new Date(date.getTime()); } @Override public String convertToEntityAttribute(Date date) { return new SimpleDateFormat("yyyy-MM-dd").format(date); }
}
关于本问题的更多回答可点击进行查看:
https://developer.aliyun.com/ask/541808?spm=a2c6h.12873639.article-detail.85.456d4378DrHxEF
问题五:seata-server consul 启动后,在 consul 看不到是正常的吗?
seata-server consul 启动后,在 consul 看不到是正常的吗?
参考答案:
Seata-server 在启动之后,默认不会在 consul 中注册自己的服务。如果您希望在 consul 中看到 seata-server 的服务,可以通过以下两种方式:
修改 seata-server 的配置文件,将 registry.type 设置为 consul。
手动将 seata-server 的服务注册到 consul 中。
以下是修改 seata-server 的配置文件的步骤:
找到 seata-server 的配置文件 conf/registry.conf。
修改 registry.type 的值为 consul。
保存并退出。
以下是手动将 seata-server 的服务注册到 consul 中的方法:
登录 consul 的管理界面。
点击左侧菜单中的 Services。
点击右上角的 Add Service 按钮。
在 Name 输入框中输入 seata-server。
在 Address 输入框中输入 seata-server 的 IP 地址和端口号。
点击 Create 按钮。
Seata-server 的服务就会在 consul 中注册成功。
关于本问题的更多回答可点击进行查看:
https://developer.aliyun.com/ask/541805?spm=a2c6h.12873639.article-detail.86.456d4378DrHxEF