我正在尝试编写集成测试以在本地启动jetty服务器,然后使用客户端与其余URI进行通信并调用下游的业务逻辑.但是,当我启动我的jetty服务器时,它不会放弃控件,因此我的客户端不会被执行.所以我使用线程在不同的线程中启动我的码头,但是,线程在客户端调用之前完成,它表示连接被拒绝.我可以采取任何方法吗?
@Test
public void testPerform() {
final JettyServer jettyServer = JettyServer.create();
jettyServer.buildJettyServer(ServletContextHandler.SESSIONS, "/", 8080, TestResource.class);
Runnable runnable = new Runnable()
{
@Override
public void run()
{
jettyServer.start();
}
};
new Thread(runnable).start();
final javax.ws.rs.client.Client client = ClientBuilder.newClient();
final Response response = client.target("http://localhost:8080/test").request().post(Entity.text(""));
jettyServer.stop();
}
Run Code Online (Sandbox Code Playgroud) 我仍然试图围绕@Transactional 的工作原理进行思考。
我@Transactional
对 Service 类的方法进行了@Modifying
注释,对 Repository 类中的方法进行了注释。带@Transactional
注释的方法是否适用于带注释的 Repository 中的方法@Modifying
?
我的理解:
@Transactional
在@Transactional( readOnly = true )
没有数据的类的方法上写入数据库,而在使用 时@Transactional
,数据写入数据库。
修改查询
- 修改方法签名只能返回
void
,Integer
或者int
- 更新查询必须是事务性的,标记为
@Transactional
- Spring Data 将删除所有未刷新的更改
EntityManager
,更改为@Modifying(clearAutomatically=false)
正如第二点所说的@Modifying
查询必须有@Transactional(readOnly=false)
,所以我们可以在@Service
方法调用@Repository
级别或方法级别调用中添加它。如果在@Service
级别添加它也适用于@Respository
从@Service
级别方法调用中调用的方法?
例子:
@Service
class AnimalServiceImpl implements AnimalService {
@Autowire
AnimalRepository animalRepository;
@Override
@Transactional
public void persistAnimal() {
....
animalRepository.save();
}
@Override
@Transactional(readOnly …
Run Code Online (Sandbox Code Playgroud) 我试图在休息时轻松实现一个简单的客户端,但我收到一个错误,说"你必须使用至少一个,但不超过一个http方法注释".在我的服务器实现中,我在我的方法上添加了一个http注释.
@Path("/")
public class TestResource
{
@GET
@Path("/domain/{value}")
public String get(@PathParam("value") final String value) {
return "Hello" + value;
}
}
Run Code Online (Sandbox Code Playgroud)
我调试了它,第一次它没有达到运行时异常,但是,它正在进行第二次调用并失败,不知道为什么以及如何.
我的客户作为junit测试:
@Test
public void testPerformRestEasy() {
ResteasyClient client = new ResteasyClientBuilder().build();
ResteasyWebTarget target = client.target("http://localhost:8080/");
TestResource proxy = target.proxy(TestResource.class);
String response = proxy.get("user");
Assert.assertEquals("Hellouser", response);
}
Run Code Online (Sandbox Code Playgroud)
它失败的代码
private static <T> ClientInvoker createClientInvoker(Class<T> clazz, Method method, ResteasyWebTarget base, ProxyConfig config)
{
Set<String> httpMethods = IsHttpMethod.getHttpMethods(method);
if (httpMethods == null || httpMethods.size() != 1)
{
throw new RuntimeException("You must use …
Run Code Online (Sandbox Code Playgroud) 我正在通过脚本运行后台进程,当Jenkin开始构建时调用此脚本.但是,jenkins构建卡住并且在查看控制台时似乎正在运行该进程并等待它完成.
这个过程永远不会完成,将其视为服务器监听其客户端.每次构建我触发器都会杀死服务器进程并重新启动进程,因此我完全可以处理这种情况.
有什么办法,我可以成功建立詹金斯吗?
我有一个列表,我想从列表中找到一个与谓词匹配的元素.我在列表中找到了与第一个谓词匹配的元素,如果第一个谓词没有返回true,则它与第二个谓词匹配.
这是一个例子:
情况1:
result = iterable.tryFind(List, Predicates.or(predicate1, predicate2)).orNull();
Run Code Online (Sandbox Code Playgroud)
这段代码的问题是它找到了匹配任何谓词的第一个元素.即使列表中的第二个元素匹配第一个谓词,在我的情况下应该给予更高的优先级.在这种情况下,我期望结果在这里作为第二个元素,但获得第一个元素(因为它是第一个元素)它匹配其中一个谓词).
案例2:
result = iterable.tryFind(List, Predicates.and(predicate1, predicate2)).orNull();
Run Code Online (Sandbox Code Playgroud)
如果第一个谓词返回false,这显然不起作用.
案例3:
result = iterable.tryFind(List, predicate1).orNull();
if(result == null)
result = iterable.tryFind(List, predicate2).orNull();
Run Code Online (Sandbox Code Playgroud)
这对我有用,但它看起来很乱,并且破坏了函数式编程的目的.
有没有其他方法从列表中获取适用于我的场景的元素?
java ×4
rest ×2
guava ×1
jenkins ×1
jetty ×1
resteasy ×1
spring ×1
transactions ×1
web-services ×1