我正在使用Spring Boot 2.0.3版本,我在实例化时遇到问题org.elasticsearch.client.Client.我的代码:
Client client = new PreBuiltTransportClient(Settings.builder()
.put("cluster.name", clustername)
.build())
.addTransportAddress(
new InetSocketTransportAddress(InetAddress.getByName(host), port)
);
Run Code Online (Sandbox Code Playgroud)
这段代码给我错误:
Caused by: java.lang.NoClassDefFoundError: org/elasticsearch/transport/Netty3Plugin
at org.elasticsearch.transport.client.PreBuiltTransportClient.<clinit>(PreBuiltTransportClient.java:91) ~[transport-5.6.10.jar:5.6.10]
at kz.icode.idmatrix.config.ElasticsearchConfiguration.client(ElasticsearchConfiguration.java:56) ~[classes/:na]
at kz.icode.idmatrix.config.ElasticsearchConfiguration$$EnhancerBySpringCGLIB$$7e53ae93.CGLIB$client$0(<generated>) ~[classes/:na]
at kz.icode.idmatrix.config.ElasticsearchConfiguration$$EnhancerBySpringCGLIB$$7e53ae93$$FastClassBySpringCGLIB$$fef36179.invoke(<generated>) ~[classes/:na]
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) ~[spring-core-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:361) ~[spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at kz.icode.idmatrix.config.ElasticsearchConfiguration$$EnhancerBySpringCGLIB$$7e53ae93.client(<generated>) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_171]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_171]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_171]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_171]
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
... 99 common frames omitted
Run Code Online (Sandbox Code Playgroud)
我用org.elasticsearch:elasticsearch:5.6.10和org.elasticsearch.client:client:5.6.10.
java spring elasticsearch spring-boot spring-data-elasticsearch
我的包结构如下:
在/db.changelog/db.changelod-master.xml中,我包含/db.changelog/v1/db.changelog-1.0.xml,其中,我还包括/db.changelog/v1/changeset软件包中的所有更改日志。
在我的应用程序中,我有两个配置文件:dev和prod,我需要根据Liquibase的“最佳实践”划分软件包的结构。有些变更日志可以在产品和开发环境中使用。
另外,我可以在changeset标记中使用context属性并显式设置dev或prod值,但是这种解决方法不是可取的。
简单用法如下:我切换到产品概要文件,并且将不会创建某些表,或者会跳过对数据库的某些插入。
您能帮我根据Liquibase“最佳实践”重构软件包的结构吗?
我正在使用 Spring Boot 2 和 Liquibase (Core 3.6.2),我的数据库是 PostgreSQL。我正在 db.changelog-master.xml 中通过此变更集创建表:
<changeSet author="system" id="1">
<createTable tableName="test">
<column name="id" type="UUID">
<constraints nullable="false"/>
</column>
<column name="note" type="VARCHAR(4096)"/>
</createTable>
</changeSet>
Run Code Online (Sandbox Code Playgroud)
下一个变更集用于将 csv 文件中的值插入到此表中:
<changeSet author="system" id="2">
<loadData encoding="UTF-8" file="classpath:liquibase/data/test.csv" quotchar=""" separator="," tableName="test">
<column header="id" name="id" type="STRING" />
<column header="note" name="note" type="STRING"/>
</loadData>
</changeSet>
Run Code Online (Sandbox Code Playgroud)
如果我在列id中指定类型 UUID而不是 STRING,liquibase 会告诉我:
loadData type of uuid is not supported. Please use BOOLEAN, NUMERIC, DATE, STRING, COMPUTED or SKIP
Run Code Online (Sandbox Code Playgroud)
test.csv文件的内容:
"id","note"
"18d892e0-e88d-4b18-a5c0-c209983ea3c0","test-note"
Run Code Online (Sandbox Code Playgroud)
当我运行应用程序时,liquibase 创建了表,当它尝试插入值时,我收到此消息:
ERROR: column "id" …Run Code Online (Sandbox Code Playgroud)