我有一个spring-boot Web应用程序,但我不想在嵌入式Tomcat/Jetty中启动它.禁用嵌入式容器的正确方法是什么?
如果我喜欢:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我一直在
org.springframework.context.ApplicationContextException: Unable to start embedded container;
Run Code Online (Sandbox Code Playgroud) 我有一组字符串.我需要能够将此集合中的项目连接成一个字符串,然后将该字符串向后拆分并获取原始字符串集合.当然,我需要为连接/拆分操作引入一个分隔符.鉴于原始字符串可以包含任何字符,我还需要处理分隔符转义.我的问题很简单 - 是否有一个Java类/库可以提供开箱即用的所需功能?就像是:
String join(String[] source, String delimiter, String escape);
String[] split(String source, String delimiter, String escape);
Run Code Online (Sandbox Code Playgroud)
或类似的,无需手动完成工作?
如何以编程方式为推土机设置自定义转换器?以下代码不起作用:
定制转换器实现:
class ConverterImpl extends DozerConverter<A, B> {
ConverterImpl() {
super(A.class, B.class);
}
@Override
public B convertTo(A source, B destination) {
return destination;
}
@Override
public A convertFrom(B source, A destination) {
return destination;
}
}
Run Code Online (Sandbox Code Playgroud)
测试代码:
DozerBeanMapper mapper = new DozerBeanMapper();
mapper.setCustomConverters(Collections.<CustomConverter>singletonList(new ConverterImpl()));
A a = new A();
B b = mapper.map(a, A.class);
Run Code Online (Sandbox Code Playgroud)
运行上面的代码后,不会调用自定义转换器.怎么了?
我有一个不使用Spring容器的小应用程序.现在需要这个应用程序访问数据库,只需几个小查询,没什么复杂的.虽然我可以用纯JDBC做到这一点,但我真的很想使用Spring-JDBC库.我担心的是,如果不将太多的Spring引入应用程序,它是否可以轻松使用."太多的春天"我的意思是必须创建弹簧容器,过多的外部库依赖等.请建议.
我有一个Web服务器集群,每个服务器运行相同的Java Web应用程序.所有这些Web应用程序实例共享相同的数据库(用于数据存储)和相同的网络文件存储(它们保存一些必需的文件).
我需要能够同步Web应用程序的实例.例如,其中一个应用程序实例从客户端接收某个请求,它会进行一些重新计算并更新其内部缓存.此时,我需要为集群中的所有其他Web应用程序更新内部缓存,以便它们中的每一个都在同一数据集上运行.
实现此类功能的最佳方法是什么?当然,我可以实现一些定制组件,它将定期轮询共享资源(数据库表中的标志或文件存储上的文件),并在满足条件时启动所需的处理.但也许我可以使用一些已经存在的库/组件/应用程序?
我正在寻找在我的应用程序中使用的持久键值存储.特别:
在这种情况下,最好的选择是什么?
这是我需要解决的问题.我有一个Web应用程序,基本上允许用户查询某些服务器数据源并查看查询结果 - 一种报告应用程序.用户可以通过指定多个预定义参数类型的值来创建查询.假设A1 .... AN是可能参数的列表,因此查询看起来像*A1 ="some_value"&A2 ="some_other_value"&...&AN ="whatever"*.我需要一种方法在应用程序用户之间共享这些查询,这是一种"书签"功能.我可以预见两种不同的方法可以用来解决这个问题:
将查询合并到URL中.所以我会将*http://www.myapp.com/q=possibly_very_very_very_long_string*作为可以在人们之间共享的URL.我个人不喜欢这种方法.长URL可能是一团糟.通过电子邮件或任何其他传输方式发送,复制/粘贴等肯定会导致糟糕的用户体验
使用服务器端存储将这些长"网址"映射到一些更加用户友好的网址.琐碎的例子是:http://www.myapp.com/q=12345其中12345将是应用程序数据库中该查询的ID.这种方法对我来说更具吸引力.
您对上述内容有何看法?也许我错过了什么?
这是一个问题,我正在尝试为其创建最佳解决方案.我有一组有限的非负整数,范围为[0 ... N].我需要能够将此集合中的每个数字表示为字符串,并能够将此字符串向后转换为原始数字.所以这应该是一个双射函数.
其他要求是:
对于p.1和p.2,显而易见的解决方案是使用类似Base64(或任何BaseXXX以适合所有值)的表示法.但是我们能否以最小的额外努力适应p.3?常识告诉我,我还需要一个双射"String < - > String"函数用于BaseXXX值.有什么建议?或者可能有比BaseXXX更好的东西来满足所有3个要求?
我有一个名为"Channel"的类,定义了两个方法:
class Channel {
void read(){...}
void write(){...}
}
Run Code Online (Sandbox Code Playgroud)
在多线程环境中使用了这个类的实例.多个线程定期从通道读取,而一个线程周期性地写入它.读操作是线程安全的,因此可以同时进行多次读操作.但是,一旦写入操作开始,必须阻止读取线程,直到写入操作完成.必须尽可能快地保持读取操作并避免消耗资源的同步例程.
实施此类行为的最合适模式是什么?也许java类或库有帮助吗?
我们的应用程序使用嵌入式Solr实例进行搜索 数据目录位于NFS上,我无法更改.Solr的用法非常简单,有一个线程定期更新索引,并且有几个读者线程 - 这些都在一个java进程中.没有其他Solr交互发生.
使用默认的"solrconfig.xml",我有时遇到"java.nio.channels.OverlappingFileLockException".据我所知,原因实际上是"SimpleFSLockFactory"与NFS无法正常工作.
问题:
鉴于上面描述的应用场景(没有并发索引修改),NoLockFactory不应该足够吗?使用NoLockFactory有什么缺点吗?如果我设置NoLockFactory,我会在错误日志中收到一些条目,说"配置警告:锁被禁用".为什么该消息会进入错误日志?这真的被认为是一个错误的案例,为什么?
也许有比使用"NoLockFactory"更好的解决方案?
不确定这与NFS有关,但有时(很少见)我的索引被破坏了,并且在尝试更新索引时我得到了很多"java.io.FileNotFoundException:_i.fdx".除了手动删除整个索引目录并从头开始之外,没有办法解决这个问题.为什么会发生这种情况,是否有任何优雅的方法可以自动检测损坏的索引并恢复?
java ×6
algorithm ×1
bijection ×1
concurrency ×1
dozer ×1
indexing ×1
nfs ×1
nosql ×1
solr ×1
spring-boot ×1
spring-jdbc ×1