我正在尝试在我的Spring Boot(1.2.0.M1)应用程序中设置HikariCP,因此我可以使用它来代替Tomcat DBCP进行测试.我想在我的application.properties文件中配置连接池,就像我在使用Tomcat一样,但我无法弄清楚我应该怎么做.我发现的所有示例都显示了JavaConfig样式,或者使用单独的HikariCP属性文件.有人可以帮我弄清楚在application.properties中配置它的属性名吗?我还想从使用driverClassName方法切换到DataSourceClassName方法,因为它看起来更干净,建议使用.这在我的application.properties文件中也可以吗?
这是我对Tomcat DBCP的看法(只是一些基本的配置,没有完全刷新)
spring.datasource.validation-query=SELECT 1
spring.datasource.max-active=10
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=5
spring.datasource.test-on-borrow=true
spring.datasource.test-on-return=true
Run Code Online (Sandbox Code Playgroud)
我目前正在使用driverClassName和jdbc url来建立连接:
spring.datasource.url=jdbc:mysql://localhost:3306/myDb
spring.datasource.driverClassName=com.mysql.jdbc.Driver
Run Code Online (Sandbox Code Playgroud) 我有一个带有Spring Data JPA(hibernate后端)存储库类的Spring Boot应用程序.我添加了一些自定义查找器方法,其中一些具有特定@Query注释,以告诉它如何获取数据.我已经为hibernate二级缓存设置了EhCache,但到目前为止,我可以获得这些结果缓存的唯一方法是启用hibernate查询缓存.我更喜欢定义一个特定的缓存并将实际的域对象存储在那里,就像它是一个普通的查找程序一样.以下是我的回购代码:
public interface PromotionServiceXrefRepository extends PagingAndSortingRepository<PromotionServiceXref, Integer> {
@Query("SELECT psx FROM Customer c " +
"JOIN c.customerProductPromotions cpp " +
"JOIN cpp.productPromotion pp " +
"JOIN pp.promotion p JOIN p.promotionServiceXrefs psx " +
"WHERE c.customerId = ?1")
@QueryHints(@QueryHint(name = "org.hibernate.cacheable", value = "true"))
@Cache(usage = CacheConcurrencyStrategy.READ_ONLY, region = "promotionServiceXrefByCustomerId")
Set<PromotionServiceXref> findByCustomerId(int customerId);
}
Run Code Online (Sandbox Code Playgroud)
这里是我定义的"promotionServiceXrefByCustomerId"缓存,它没有被使用:
<cache name="promotionServiceXrefByCustomerId" overflowToDisk="true" diskPersistent="true"
maxEntriesLocalHeap="3000000" eternal="true" diskSpoolBufferSizeMB="20" memoryStoreEvictionPolicy="LFU"
transactionalMode="off" statistics="true">
</cache>
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?如果我启用,StandardQueryCache则此数据将缓存在那里,而hibernate不会执行查询.但是当我禁用查询缓存时,这不会被缓存.我在这做错了什么?请帮忙!
阅读关于如何启用Dropwizard指标的HikariCP wiki上的说明,它说只需在HikariConfig或HikariDatasource中配置MetricsRegistry实例.问题是,在Spring Boot中,所有配置都由自动配置处理,因此我根本不会手动配置HikariCP池.有关如何执行此操作的任何说明?我是否必须通过定义自己的bean并在@Configuration文件中设置所有设置来完全覆盖自动配置?
java connection-pooling spring-boot hikaricp codahale-metrics
我正在尝试使用RSpec来功能测试我的REST apis.
我喜欢它的工作方式是使用CI构建来构建我的应用程序并将其部署到云中的某个测试服务器,然后启动自动功能测试.但为了正确地做到这一点,我需要能够传入部署应用程序的基本URL /域.它不会是一样的.
到目前为止我发现的所有东西都让RSpec看起来不能做到这一点.如果我不能在命令行上传递参数,还有另一种方法吗?或者RSpec不是这个的正确选择?
我的Spring Boot应用程序中有一个带有单个方法的RestController.此方法处理对/ foo url的POST请求.它将ID和DTO对象作为参数.DTO对象正在被杰克逊反序列化.我已将@Valid添加到DTO参数以验证传递的两个属性.我的问题在于我为一个应该是int的字段传入一个String.这会触发HttpMessageNotReadableException,输出的"message"包含类和类名称等内部对象表示信息.在@Valid的hibernate验证之前,杰克逊反序列化逻辑中发生了这个错误.我可以在我的控制器中创建一个@ExceptionHandler注释方法来处理这些类型的异常,但是我必须手动制作json输出或者坚持使用Spring从Jackson使用的默认消息.
这是Spring发生此异常时输出的内容:
{
"timestamp": 1427473174263,
"status": 400,
"error": "Bad Request",
"exception": "org.springframework.http.converter.HttpMessageNotReadableException",
"message": "Could not read JSON: Can not construct instance of int from String value 'SHOULDNT BE A STRING': not a valid Integer value\ at [Source: java.io.PushbackInputStream@34070211; line: 1, column: 3] (through reference chain: com.blah.foo.dto.CustomerProductPromotionDTO[\"productId\"]); nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not construct instance of int from String value 'SHOULDNT BE A STRING': not a valid Integer value\ at [Source: java.io.PushbackInputStream@34070211; line: 1, column: 3] (through reference …Run Code Online (Sandbox Code Playgroud) 所以我在使用 PoolingHttpClientConnectionManager 时似乎遇到了与 DNS 主机名解析缓存相关的问题。我有一个 api 可以调用外部服务。此服务使用 Akamai 边缘缓存,因此 IP 地址可能会更改。这个 api 负载很重。我为池大小设置了 100 个最大连接,空闲超时线程在空闲 30 秒后关闭空闲连接。但是由于交通繁忙,我认为连接永远不会空闲。因此,如果此服务主机的 IP 地址发生更改,我的应用程序似乎永远不会接受该更改,因为池中的所有连接都保留了旧的 DNS 解析的 IP 地址。
我已经通过更改我的 mac 上的 /etc/hosts 文件(并刷新操作系统缓存)在本地测试了这个假设。只要我的 API 应用程序有稳定的流量,即使在 java.security 中设置了 5 秒的 TTL,它也永远不会改变。在将主机名更改为指向会导致调用失败的无效 IP 地址后,我让它运行了 20 分钟,并且它从未失败过。我停止了我正在发送的 JMeter 流量,等待大约 30 秒并手动点击它,但呼叫失败,告诉我它接受了更改。
有任何想法吗?我需要停止使用连接池吗?或者编写我自己的 DnsResolver(不确定它应该如何工作)?如果此服务的 DNS 条目发生更改,我如何确保连接池中的连接会更新?
所以这是我的问题.我的Spring Boot应用程序使用Hibernate/JPA和ehCache进行二级缓存.我想用Dropwizard/Coda-Hale指标来测试ehCache,但我不确定如何做到这一点.如果我手动创建Cache实例,那么它很简单.你只需使用这里显示的装饰器.但由于它是Spring/Hibernate,我无法控制缓存.有什么想法我会如何设置它?
我有一个memcached实例,在ec2实例上设置了10GB空间,内存充足(我相信15GB).我很困惑地看到统计"total_items"大于curr_items属性,考虑到当项目写入memcache时,超时设置为0(永不过期).有人可以为我解释这些统计数据以及为什么它似乎没有缓存中的所有项目?
STAT cmd_set 174978
...
STAT delete_misses 0
STAT delete_hits 0
...
STAT bytes_read 45749254
STAT bytes_written 26472821
STAT limit_maxbytes 10737418240
...
STAT bytes 25386981
STAT curr_items 99198
STAT total_items 174978
STAT evictions 0
STAT reclaimed 0
任何人都知道最佳实践是什么或有关于在XML元素中使用HTML/XHTML内容的一般建议?是最好使用CDATA还是HTML编码HTML?