假设您有一个 SQL 数据库,例如 mysql 或 postgresql。您有两个表:用户和汽车。一个用户可以驾驶 N 辆车,一辆车可以由 N 个用户驾驶,因此您有第三个带有两个外键的“驾驶”表。
现在,您希望您的表用户继续使用elasticsearch,因为您希望按姓名、电子邮件等搜索用户...也许您还需要在汽车表上进行一些搜索。
我看到三种方法可以实现这一目标,我想知道最好的方法是什么:
1)放弃sql数据库。您所有的表现在都在 elasticsearch 上。您可以搜索任何您想要的内容,但您必须手动处理所有约束。
2)保留sql数据库上的结构,保留三个表,主键和外键。但是您的表仅包含elasticsearch中关联行的elasticsearch ID。例如,在表 user 中,您保留 user_id 并添加 user_elasticsearch_id ,该 ID 指向您在其中找到名称、电子邮件等的elasticsearch 行...因此您有 sql 约束,您可以进行搜索,但您必须维护两张桌子。
3)复制。你不接触你的sql数据库,你复制elasticsearch数据库上的所有行。你有你的限制,你可以搜索,但同样你必须维护两个表,并且你有两倍的数据和两倍的存储。
现在,勇敢的 stackoverflow 小伙伴,在这种情况下你会怎么做?
谢谢。
我正在努力使用 postgresql 作为数据库安装 sonarqube (v7.6)。我已按照声纳网站的说明进行操作:https : //docs.sonarqube.org/latest/setup/install-server/
但我坚持这个模糊的错误:
sh /opt/sonarqube/bin/linux-x86-64/sonar.sh console
Running SonarQube...
wrapper | --> Wrapper Started as Console
wrapper | Launching a JVM...
jvm 1 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
jvm 1 | Copyright 1999-2006 Tanuki Software, Inc. All Rights Reserved.
jvm 1 |
jvm 1 | 2019.02.12 07:18:55 INFO app[][o.s.a.AppFileSystem] Cleaning or creating temp directory /opt/sonarqube/temp
jvm 1 | 2019.02.12 07:18:55 INFO app[][o.s.a.es.EsSettings] Elasticsearch listening on /127.0.0.1:9001
jvm 1 | 2019.02.12 07:18:55 INFO app[][o.s.a.p.ProcessLauncherImpl] Launch process[[key='es', …Run Code Online (Sandbox Code Playgroud) 我想知道打开和关闭 java elasticsearch 客户端时的好做法是什么。我是否在每个请求之间打开和关闭它?或者我可以对所有请求使用单个客户端实例吗?
private Client client;
@PostConstruct
public void init() {
try {
client = new PreBuiltTransportClient(Settings.EMPTY)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(host), port));
} catch (UnknownHostException e) {
LOGGER.error("Unable to create ESClient : {}", e);
}
}
@PreDestroy
public void destroy() {
client.close();
}
Run Code Online (Sandbox Code Playgroud)
谢谢 !
我检查了我的一个 Spring 应用程序的日志,发现了一些奇怪的错误消息:
UT005023: Exception handling request to /nice%20ports%2C/Tri%6Eity.txt%2ebak
org.springframework.security.web.firewall.RequestRejectedException: The request was rejected because the URL contained a potentially malicious String "%2e"
at org.springframework.security.web.firewall.StrictHttpFirewall.rejectedBlacklistedUrls(StrictHttpFirewall.java:140) ~[spring-security-web-4.2.4.RELEASE.jar!/:4.2.4.RELEASE]
at org.springframework.security.web.firewall.StrictHttpFirewall.getFirewalledRequest(StrictHttpFirewall.java:120) ~[spring-security-web-4.2.4.RELEASE.jar!/:4.2.4.RELEASE]
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:193) ~[spring-security-web-4.2.4.RELEASE.jar!/:4.2.4.RELEASE]
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177) ~[spring-security-web-4.2.4.RELEASE.jar!/:4.2.4.RELEASE]
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:347) ~[spring-web-4.3.14.RELEASE.jar!/:4.3.14.RELEASE]
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:263) ~[spring-web-4.3.14.RELEASE.jar!/:4.3.14.RELEASE]
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-1.4.22.Final.jar!/:1.4.22.Final]
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-1.4.22.Final.jar!/:1.4.22.Final]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) ~[spring-web-4.3.14.RELEASE.jar!/:4.3.14.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.14.RELEASE.jar!/:4.3.14.RELEASE]
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-1.4.22.Final.jar!/:1.4.22.Final]
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-1.4.22.Final.jar!/:1.4.22.Final]
at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:108) ~[spring-web-4.3.14.RELEASE.jar!/:4.3.14.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.14.RELEASE.jar!/:4.3.14.RELEASE]
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-1.4.22.Final.jar!/:1.4.22.Final]
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-1.4.22.Final.jar!/:1.4.22.Final]
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81) ~[spring-web-4.3.14.RELEASE.jar!/:4.3.14.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.14.RELEASE.jar!/:4.3.14.RELEASE]
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-1.4.22.Final.jar!/:1.4.22.Final] …Run Code Online (Sandbox Code Playgroud) 我有一个带有“描述”字段的对象列表。该字段可能很大(+3000个字符),但是我在预览中使用了该字段(我只显示100个首字符)。
杰克逊中是否有办法限制写入时String的大小?我只想让杰克逊将其裁剪为100个字符。(这里不需要进行bean验证)。
例如,如果我有一个这样的对象:
{
"description" : "bla bla bla bla... + 3000 char"
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望将其裁剪成小偷:
{
"description" : bla bla [max 100 chars] bla..."
}
Run Code Online (Sandbox Code Playgroud)
谢谢。
对于使用 Spring/Kotlin 注入 bean,我知道两种方法:将其传递到构造函数中:
@Service
open class MyService @Autowired constructor(
@Autowired
val myRepository: MyRepository
)
Run Code Online (Sandbox Code Playgroud)
使用“lateinit”关键字:
@Service
open class MyService {
@Autowired
lateinit var myRepository: MyRepository
}
Run Code Online (Sandbox Code Playgroud)
我知道这两部作品,但我想知道哪一部最好?是否存在我可以使用一种解决方案而不是另一种解决方案遇到的问题?
谢谢 !