小编ode*_*dia的帖子

在 Oracle DB 中唯一标识源 JDBC 进程

我们正在使用 java(Spring 和 Spring Boot)开发微服务,对 Oracle DB 的访问是通过 JDBC Oracle Driver 完成的。

问题是我们的 DBA 只能在 Oracle 端看到连接了“JDBC 瘦客户端”。连接的应用程序没有更好的逻辑表示。如果没有这样的识别,就很难知道哪个微服务可能表现不佳。其他非 JDBC 客户端使用主机名清楚地标识自己。

有什么方法可以更改标识字符串,使其代表源应用程序/进程的明确标识?

注意:我们的系统在使用容器的 Cloud Foundry 上运行,因此实际上不可能提供机器名称或类似的名称 - 首选逻辑应用程序名称。

谢谢

java oracle spring jdbc spring-jdbc

6
推荐指数
1
解决办法
1395
查看次数

Bean验证:如何手动创建ConstraintViolation?

我有一个特定的场景,在该场景中,稍后只能手动检查违规情况。

我想做的是抛出一个ConstraintViolationException,并为其提供“真实” ConstraintViolation object(当我将异常捕获到堆栈中时,我使用#{validatedValue}violation.getPropertyPath()参数)。

如何在ConstraintViolation没有框架的情况下通过注释为我创建自己(我使用Hibernate Validator)?

代码示例:

List<String> columnsListForSorting = new ArrayList<String>(service.getColumnsList(domain));
Collections.sort(columnsListForSorting);

String firstFieldToSortBy = this.getTranslatedFieldName(domain.getClass().getCanonicalName(), sortingInfo.getSortedColumn());
if (!columnsListForSorting.contains(firstFieldToSortBy)){
    throw new ConstraintViolationException(<what here?...>);
}
Run Code Online (Sandbox Code Playgroud)

谢谢。

java validation hibernate-validator bean-validation

5
推荐指数
3
解决办法
1万
查看次数

Spring Cloud,Spring Data Redis和Eureka的生产注意事项

我有一个跨越4种服务器类型的Spring Cloud微服务应用程序:一个安全网关,两个UI服务器和一个REST API服务器。其中的每一个都将在生产环境中的自己的VM上运行:REST服务器的4个服务器实例,彼此之间的2个实例。

该系统预计将为大约30,000个用户提供服务。

服务发现由Eureka提供。我有两个用于故障转移的Eureka服务器。

共享的HTTP会话由Spring Session和Spring Data Redis使用参与服务器上的@EnableRedisHttpSession注释提供。

我决定为Redis设置3个VM(在此URL:http://redis.io/topics/sentinel上的“示例2:三个框的基本设置” )。

每个虚拟机将运行Redis服务器和Redis标记进程(其中Redis服务器之一将为主服务器,两个实例为从属服务器)

这一切在开发机器和系统测试机器上都非常有效,它们大多数都在同一服务器上运行所有进程。

我现在正在尝试在具有多个VM的类似于生产的环境中运行性能测试。我想从已经在生产中使用类似Spring Cloud设置的开发人员那里获得一些反馈和建议:

  • 我应该寻找什么边缘情况?
  • 有建议的配置设置吗?我的设置如下所示。
  • 是否有一些配置设置在测试环境中可能会很好运行,但在生产环境中会成为严重的问题?
  • 在我的特定情况下,我还希望有一种从Redis清除旧数据的解决方案,因为它仅用于保存会话信息。如果由于某种原因spring无法在会话期满时清除会话数据(例如,服务器突然被杀死),我想对真正的旧数据进行一些清除。我了解了有关Redis的LRU /缓存机制的信息,但是似乎只有在达到某些数据大小时,它才能在时间方面没有任何保证。

这是我的主Redis服务器的配置。从站几乎是相同的,只是端口不同,表明它们是主站的从站:

daemonize no

port 6379
dbfilename "dump6379.rdb"
dir "/Users/odedia/Work/Redis/6379"
pidfile "/Users/odedia/Work/Redis/redis6379.pid"
#logfile "/Users/odedia/Work/Redis/redis6379.log"

tcp-backlog 511
timeout 0
tcp-keepalive 60
loglevel notice
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
slave-serve-stale-data yes
slave-read-only no
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no …
Run Code Online (Sandbox Code Playgroud)

production redis spring-data-redis spring-session spring-cloud

5
推荐指数
1
解决办法
1317
查看次数

MyBatis RowBounds不限制查询结果

我正在开发一个需要支持分页的无状态API.

我使用的是Oracle数据库.我使用Spring和MyBatis进行数据库访问.

从文档中,我了解到我可以使用RowBounds类来限制查询返回的行数.

但是,似乎没有对查询进行特殊优化以支持分页.

例如,如果我将RowBounds设置为使用50条记录偏移100,我希望查询添加以下内容:

(original query with the where clause...)
and ROWNUM < 150
and ROWNUM >= 100
Run Code Online (Sandbox Code Playgroud)

但那里什么也没有,只是我手动定义的查询.

这对性能来说太糟糕了,因为我可能有几千个结果.

我究竟做错了什么?

谢谢.

sql oracle spring mybatis

4
推荐指数
2
解决办法
2万
查看次数