我有一个Spring Boot应用程序。 我添加了很多依赖项(不幸的是,看起来我需要所有的依赖项),启动时间增加了很多。 只要做一个SpringApplication.run(source, args)需要10秒。 虽然与“使用”相比可能没有太大的差别,但我却不高兴,这主要是因为它打破了开发stream程。 应用程序本身在这一点上是相当小的,所以我认为大部分时间都与增加的依赖关系有关,而不是应用程序类本身。 我假设这个问题是类path扫描,但我不知道如何: 确认是问题(即如何“debugging”Spring Boot) 如果真的是这个原因,我怎么能限制它,所以它变得更快? 例如,如果我知道某些依赖项或包没有包含Spring应该扫描的任何内容,是否有限制的方法? 我假设: https://jira.spring.io/browse/SPR-8767 会加快速度,但在这一点上还没有被分类。 我在Spring Boot本身看到了一些其他的努力,例如: https://github.com/spring-projects/spring-boot/issues/1610 但是这看起来像Tomcat特有的。 本文: http://www.nurkiewicz.com/2010/12/speeding-up-spring-integration-tests.html 虽然针对集成testing,build议使用lazy-init=true ,但是我不知道如何将这个应用到Spring Boot中所有使用Javaconfiguration的bean – 这里有什么指针? 任何(其他)build议将受到欢迎。
我们使用Oracle作为Web应用程序的数据库。 应用程序大部分时间运行良好,但是我们得到这个“没有更多的数据从套接字读取”的错误。 Caused by: java.sql.SQLRecoverableException: No more data to read from socket at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1142) at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1099) at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:288) at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:191) at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:523) at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207) at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:863) at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1153) at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1275) at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3576) at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3620) at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1491) at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:93) at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:93) at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208) at org.hibernate.loader.Loader.getResultSet(Loader.java:1869) at org.hibernate.loader.Loader.doQuery(Loader.java:718) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:270) at org.hibernate.loader.Loader.doList(Loader.java:2449) … 63 more 我们使用spring,hibernate,并在我的applciation上下文文件中有以下数据源。 <bean […]
虽然我一直在研究这个问题,但是我还是一个新手,想读一下Spring的文档和Netflix。 我已经开始在Github上提供一个简单的项目。 它基本上是一个尤里卡服务器(阿基米德)和三个尤里卡客户端微服务(一个公共API和两个私人)。 查看github的自述文件以获得详细的描述。 关键是,当一切正在运行,我想如果一个私人微服务被杀害,尤里卡服务器实现并从registry中删除它。 我在Stackoverflow上发现了这个问题 ,并且通过在Eureka服务器configuration中使用enableSelfPreservation:false来传递解决scheme。 这样做一段时间后杀死的服务消失如预期。 不过,我可以看到以下消息: 自我保存模式已closures。如果出现networking问题或其他问题,可能无法保护实例过期。 1.自我保护的目的是什么? 该文件指出,在“客户可以得到不存在的实例”的自我保护。 那么build议何时开启/closures? 而且,当自我保护function开启时,您可能会在Eureka服务器控制台中收到一条出色的信息警告: 紧急! EUREKA可能会不正当地声称,如果没有。 延期时间比阈值小,因此,这些物品没有过期,只是为了安全起见。 现在,继续与spring尤里卡控制台。 Lease expiration enabled true/false Renews threshold 5 Renews (last min) 4 我遇到了一个奇怪的阈值计数行为:当我单独启动Eureka服务器时,阈值为1。 2.我有一台Eureka服务器,并configuration了registerWithEureka: false以防止它在另一台服务器上注册。 那么,为什么会出现在门槛计数? 3.对于每个客户我开始的门槛计数增加+2。 我想这是因为他们每分钟发送2条更新消息,对吗? 4.尤里卡服务器从不发送更新,因此最后一次更新始终低于阈值。 这是正常的吗? renew threshold 5 rewnews last min: (client1) +2 + (client2) +2 -> 4 服务器cfg: server: port: ${PORT:8761} eureka: […]
我一直在试验没有取得任何成功,我正在运行一个Linux上的Gitlab,并试图让我的脑海中的CIfunction。 根据Gitlab文档,您只需要创build一个.gitlab-ci.yml文件,即Travis-CI的Gitlab实现。 现在从外观.gitlab-ci.yml ,你可以用.gitlab-ci.yml完成很多.gitlab-ci.yml ,但是很多文档都是引用Ruby和其他语言的。 关于如何构buildJava Maven项目没有任何说法。 我如何在Java中构build一个简单的应用程序? 我可以使用共享的运行程序,还是应该使用特定的运行程序,在这种情况下,应该select什么或哪个运行程序实现:ssh,docker或shell? 那么,我应该怎么把.gitlab-ci.yml文件放到Maven中来构build项目呢?
我正在研究使用Spring和Hibernate的Java应用程序,并在Websphere上运行。 我遇到了一个问题,我希望Spring将Dao加载到我的对象中,但由于某种原因,这并没有发生。 (以同样方式指定的另一个Dao加载正常。) 问题是 – 我怎样才能debuggingSpring如何决定如何加载? 我可以打开日志logging的spring,在哪里?
这是我的job.xml一部分: <job id="foo" job-repository="job-repository"> <step id="bar"> <tasklet transaction-manager="transaction-manager"> <chunk commit-interval="1" reader="foo-reader" writer="foo-writer" /> </tasklet> </step> </job> 这是项目的读者: import org.springframework.batch.item.ItemReader; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component("foo-reader") public final class MyReader implements ItemReader<MyData> { @Override public MyData read() throws Exception { //… } @Value("#{jobParameters['fileName']}") public void setFileName(final String name) { //… } } 这就是Spring Batch在运行时所说的: Field or property […]
我在Spring bean中有以下内容: @Value("${myValue}") private String value; 该值被正确注入。 但是,variables需要是可选的,它作为命令行参数传入(然后使用SimpleCommandLinePropertySource将其添加到Spring上下文中),并且该参数不会始终存在。 我已经尝试了以下两种方法来提供默认值: @Value("${myValue:}") @Value("${myValue:DEFAULT}") 但是在每种情况下,即使有实际的值,冒号之后的默认参数也被注入 – 这看起来会覆盖Spring应该注入的内容。 什么是正确的方式来指定@Value不是必需的? 谢谢
我有一个Spring的应用程序与以下application.yml – 基本上从这里采取: info: build: artifact: ${project.artifactId} name: ${project.name} description: ${project.description} version: ${project.version} 我可以注入特定的值,例如 @Value("${info.build.artifact}") String value 然而,我想要注入整个地图,即像这样的东西: @Value("${info}") Map<String, Object> info 那(或者类似的)是可能的吗? 显然,我可以直接加载yaml,但是想知道Spring是否已经支持某些东西。
Spring支持JUnit:使用RunWith和ContextConfiguration注解,事情看起来非常直观 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:dao-context.xml") 这个testing将能够在Eclipse和Maven中正确运行。 我不知道TestNG是否有类似的东西。 我正在考虑转移到这个“下一代”框架,但我没有find与春季testing匹配。
在Springs最新版本中,我们可以使用@Autowired标注自动装载一个bean。 这将使用它的types(或构造函数,如果应用的话)自动装载bean。 有没有什么办法可以使用@Autowired注解基于我们在Spring的XML文件中作为autowire =“byName”而没有注释的bean名称?