Questions tagged «java»

Java是一种流行的高级编程语言。如果您在使用或理解语言本身时遇到问题,请使用此标签。这个标签很少单独使用,最常与[spring],[spring-boot],[jakarta-ee],[android],[javafx],[gradle]和[maven]结合使用。

1
MIUI 10不允许服务启动活动-小米Redmi注意
我的应用程序具有服务和活动。在服务中,使用以下代码调用活动: Intent intent = new Intent(getApplicationContext(), MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); 即使没有这些标志,活动窗口也通常以正确的布局显示。但是,在具有Android 7的Xiaomi Redmi Note 4上,不会显示活动布局。我只在logcat上看到以下行: I /时间轴:时间轴:Activity_launch_request时间:281438674目的:目的{flg = 0x30000000 cmp = com.test.app / .MainActivity} 我认为这不是Android 7(API 24)的问题,因为在具有Android 7的另一台设备上,服务可以成功启动活动。我猜想,MIUI正在阻止从服务启动活动。 我尝试更改清单中定义活动的方式。我还尝试了几种不同的标志。我所有的测试都失败了。我无法成功开始活动。最糟糕的问题是日志中没有错误/异常。 有什么想法吗?
9 java  android  miui 

2
java.net.SocketException:Spring Rest模板中的连接重置
我这里有一个奇怪的问题。 在我重新启动客户端的tomcat服务器之前,以下代码可以正常工作。一旦我使用相同代码的最新war文件重启tomcat服务器(war文件中存在客户端程序),它将引发以下错误。我正在使用JDK 8。 下面是示例代码。从浏览器中,我可以从以下程序中使用的URL获得响应。但也无法使用Java程序或Postman获取数据。 package com.example.demo; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; @Component public class TestService implements CommandLineRunner{ @Override public void run(String... args) throws Exception { download(); } private void download() { System.out.println("Started download"); try{ RestTemplate restTemplate = new RestTemplate(); String url = "https://www.nseindia.com/live_market/dynaContent/live_watch/stock_watch/niftyStockWatch.json"; byte[] forObject = restTemplate.getForObject(url, byte [].class); …

4
错误:无法确定当前字符,它不是Android的react-native中的字符串,数字,数组或对象
每当我在保持模拟器运行的同时运行react-native run-android时,都会出现此错误。react-native run-ios程序完全正常。 Error: Command failed: ./gradlew app:installDebug -PreactNativeDevServerPort=8081 :ReactNative:Failed to parse React Native CLI configuration: groovy.json.JsonException: Unable to determine the current character, it is not a string, number, array, or object The current character read is 'E' with an int value of 69 Unable to determine the current character, …

6
在POJO中复制公共属性的获取者/设置者的方法
我们有一个自动生成的POJO,具有约60个属性。这是通过avro 1.4生成的,其中不包括getter / setter。 我们用来在对象之间提供简单转换的库需要使用类似于getter / setter的方法才能正常工作。 有没有一种方法可以复制获取器/设置器,而不必手动覆盖POJO并手动创建所有获取器/设置器? public class BigGeneratedPojo { public String firstField; public int secondField; ... public ComplexObject nthField; } public class OtherObject { private String reprOfFirstFieldFromOtherObject; private ComplexObject reprOfFirstFieldFromOtherObject; public String getReprOfFirstFieldFromOtherObject() { ... standard impl ... }; public void setReprOfFirstFieldFromOtherObject() { ... standard impl ... …

3
Oracle JDBC优化:在Spring Boot应用程序中启用PreparedStatement缓存
我有一个连接到Oracle数据库的Spring Boot REST应用程序。我们正在通过JdbcTemplate使用JDBC。Oracle数据库属性是通过以下3个application.properties设置获得的: spring.datasource.url spring.datasource.username spring.datasource.password 该应用程序正在使用HikariCP。从HikariCP网站上,我知道该池不缓存PreparedStatements,因为JDBC驱动程序是最好的设置。 现在,我将在哪里指定什么来确保这些: Oracle JDBC驱动程序(ojdbc7.jar)缓存PreparedStatements。有没有一种方法可以自定义它可以缓存的PreparedStatements的数量。 从https://howtodoinjava.com/java/jdbc/best-practices-to-improve-jdbc-performance/中,我们看到 确保将数据库设置为最大数据包大小,并且驱动程序与该数据包大小匹配。为了获取更大的结果集,这减少了驱动程序和服务器之间发送/接收的总数据包数量。 为此,需要采取哪些步骤? 查找Oracle DB Server数据包大小 查找是否将Oracle DB Server设置为最大数据包大小 查找设置Oracle JDBC驱动程序的(ojdbc8.jar)数据包大小。 任何其他(Oracle)JDBC性能优化技巧将不胜感激。

3
GRPC:在Java / Scala中制作高吞吐量客户端
我有一项可以以很高的速率传输邮件的服务。 目前,它由akka-tcp提供服务,每分钟发送350万条消息。我决定尝试一下grpc。不幸的是,它导致吞吐量大大降低:每分钟约50万条消息甚至更低。 您能推荐如何优化它吗? 我的设定 硬件:32核,24Gb堆。 grpc版本:1.25.0 消息格式和端点 消息基本上是一个二进制blob。客户端将100K-1M和更多消息流传输到同一请求中(异步),服务器不响应任何内容,客户端使用无操作观察者 service MyService { rpc send (stream MyMessage) returns (stream DummyResponse); } message MyMessage { int64 someField = 1; bytes payload = 2; //not huge } message DummyResponse { } 问题:与akka实施相比,消息速率低。我观察到CPU使用率较低,因此我怀疑grpc调用实际上在内部阻塞,尽管它另有说明。onNext()确实不会立即返回调用,但表上也有GC。 我试图产生更多的发件人来缓解此问题,但并没有太大的改进。 我的发现 Grpc在序列化每个消息时实际上分配了一个8KB的字节缓冲区。请参阅堆栈跟踪: java.lang.Thread.State:在com.google.common.io.ByteStreams.copy(ByteStreams.java:com.google.common.io.ByteStreams.createBuffer(ByteStreams.java:58)处处于阻塞状态(在对象监视器上): 105)在io.grpc.internal.MessageFramer.writeToOutputStream(MessageFramer.java:274)在io.grpc.internal.MessageFramer.writeKnownLengthUncompressed(MessageFramer.java:230)在io.grpc.internal.MessageFramer.writeUncompressed(MessageFramer.java :168)位于io.grpc.internal.MessageFramer.writePayload(MessageFramer.java:141)位于io.grpc.internal.AbstractStream.writeMessage(AbstractStream.java:53)位于io.grpc.internal.ForwardingClientStream.writeMessage(ForwardingClientStream。 java:37)位于io.grpc.internal.DelayedStream.writeMessage(DelayedStream.java:252)位于io.grpc.internal。io.grpc.internal.ClientCallImpl.sendMessage(ClientCallImpl.java:457)的io.grpc.ForwardingClientCall.sendMessage(ForwardingClientCall.java:37)的io.grpc.internal.ClientCallImpl.sendMessageInternal(ClientCallImpl.java:473)io.grpc.ForwardingClientCall.sendMessage的(ForwardingClientCall.java:37)位于io.grpc.stub.ClientCalls $ CallToStreamObserverAdapter.onNext(ClientCalls.java:346) 对于构建高吞吐量grpc客户的最佳做法的任何帮助,均表示赞赏。
9 java  scala  grpc 

1
如何为基于json的插件'docker plugin install'
我正在开发一个全新的批量插件,并且需要通过所有的vol-test测试。我已经成功通过了所有测试(在安装了插件的环境中),但第一个测试除外docker plugin install。事实是,有三种可能的方式可以安装自定义插件: .sock文件是UNIX域套接字。 .spec文件是包含URL的文本文件,例如unix:///other.sock或tcp:// localhost:8080。 .json文件是包含插件完整json规范的文本文件。 我们使用json,这只是实现docker API的REST服务器(用java,spring编写)。它的安装过程很简单:只需将json文件复制到其中/etc/docker/plugins,dockerd就会自动发现它。 当我尝试将插件集成到docker plugin install命令中时,问题就来了。由于它说在这里: Docker首先在您的Docker主机上寻找插件。如果该插件在本地不存在,则将该插件从注册表中拉出。 我们的安装过程不假定已连接到私有或公共注册表,因此我们需要第一个docker plugin create命令才能在本地创建插件。这就是我很难理解如何使用基于json的插件做到这一点的地方。根据此文档,我需要指定插件的路径。如果我使用它需要一个目录名config.json和rootfs存在于该目录中。 但 1 config.json-这是一个配置,它描述.sock格式CONFIGS,而不是.json格式(请纠正我,如果我错了) 2.我如何创建根文件系统,为什么我需要它,如果我的插件仅仅是一个独立的REST服务,它甚至不在容器中? 感谢任何帮助。
9 java  spring  docker 

1
Java“ Foo f = new Foo()”中的对象初始化与使用malloc作为C语言中的指针是否基本相同?
我试图了解Java中对象创建背后的实际过程-并且我想使用其他编程语言。 假定Java中的对象初始化与对C中的结构使用malloc相同是错误的吗? 例: Foo f = new Foo(10); typedef struct foo Foo; Foo *f = malloc(sizeof(Foo)); 这就是为什么说对象位于堆而不是堆栈上的原因吗?因为它们本质上只是数据指针?

3
如何逐行复制大数据文件?
我有一个35GB的CSV文件。我想读取每一行,如果符合条件,则将该行写到新的CSV中。 try (BufferedWriter writer = Files.newBufferedWriter(Paths.get("source.csv"))) { try (BufferedReader br = Files.newBufferedReader(Paths.get("target.csv"))) { br.lines().parallel() .filter(line -> StringUtils.isNotBlank(line)) //bit more complex in real world .forEach(line -> { writer.write(line + "\n"); }); } } 这大约需要。7分钟 是否可以进一步加快该过程?

2
FactoryFinder性能/不良缓存
我有一个相当大的Java ee应用程序,它具有执行许多xml处理的巨大类路径。目前,我正在尝试加快某些功能的速度,并通过采样分析器定位慢速代码路径。 我注意到的一件事是,特别是我们在其中调用类似代码的部分TransformerFactory.newInstance(...)非常慢。我跟踪下来到FactoryFinder方法findServiceProvider始终创建一个新的ServiceLoader实例。在ServiceLoader javadoc中,我发现了有关缓存的以下说明: 提供商的位置很懒,即按需实例化。服务加载器维护到目前为止已加载的提供者的缓存。每次迭代器方法的调用都会返回一个迭代器,该迭代器首先按实例化顺序生成高速缓存的所有元素,然后懒惰地定位和实例化任何剩余的提供程序,依次将每个提供程序添加到高速缓存中。可以通过reload方法清除缓存。 到目前为止,一切都很好。这是OpenJDKs FactoryFinder#findServiceProvider方法的一部分: private static <T> T findServiceProvider(final Class<T> type) throws TransformerFactoryConfigurationError { try { return AccessController.doPrivileged(new PrivilegedAction<T>() { public T run() { final ServiceLoader<T> serviceLoader = ServiceLoader.load(type); final Iterator<T> iterator = serviceLoader.iterator(); if (iterator.hasNext()) { return iterator.next(); } else { return null; } } }); …

3
传递变量beetwen groovy文件
我正在通过DSL插件管理Jenkins中的许多工作。该插件使用.groovy定义,因此我认为即使有人不使用Jenkins,但使用groovy可能也可以提供帮助。 通常,我想创建一个其他文件,该文件可以是groovy文件,JSON或YAML等。重要的是可以将该文件与我的.groovy文件连接。 在该文件中,我正在定义变量(而不是字符串),例如地址IP或其他内容。 ip_gitlab: 1.2.3.4 default_user: admin 在我的常规文件中,我希望能够使用这些变量。 这种方法在常规中可行吗?
9 java  jenkins  groovy  dsl 

1
与类访问修饰符相比,限制较少的成员访问修饰符有什么用?
假设我有一个包含一些成员的类,并且这些成员的限制访问修饰符比类本身少。 一个具体的例子可能是: package apples; class A { // package private public int foo() { // public (=> less restrictive than *package private*) return 42; } } 据我了解,与成员访问修饰符相比,限制更严格的类访问修饰符将覆盖限制性较小的成员访问修饰符。因此,限制较少的成员访问修饰符应该完全无效。 我的理解正确吗? 如果没有,后果是什么? 限制成员访问修饰符较少的正当理由是什么? 最后,有什么最佳实践可遵循? 我也做了一些试验,因为我认为一旦开始传递函数引用,它可能会产生后果,但是即使那样,访问修饰符似乎也没有关系。 我构造的情况如下: apples.B提供一个bla()返回对的引用的公共方法apples.A.foo。 然后pizzas.C调用apples.B.bla获取A.foo对它的引用并对其进行调用。 因此对A.foo()不能直接看到C,而只能通过间接访问B.bla() 我已经对其进行了测试,并且无论是否将foo() 包的访问修饰符设置为私有都不会有任何区别。 package apples; import java.util.function.IntSupplier; public class B { public IntSupplier getReferenceToAFoo() { …

3
如果使用Java 8 Streams列表为空,则返回默认列表?
有什么办法可以将以下操作作为一组流操作执行,而不是显式检查RecommendationProducts 是否为空,然后返回默认列表,否则返回过滤后的列表? public List<Product> getRecommendedProducts() { List<Product> recommendedProducts = this.newProducts .stream() .filter(isAvailable) .collect(Collectors.toList()); if (recommendedProducts.isEmpty()) { return DEFAULT_PRODUCTS; } return recommededProducts; }

2
在Java中,何时应在接口中使用私有实例方法?
从Java 9开始,接口中的方法可以是私有的。私有方法可以是静态方法,也可以是实例方法。由于私有方法只能在接口本身的方法中使用,因此它们的使用仅限于接口其他方法的辅助方法。 Cay S. Horstmann,核心Java第一册-基础 我知道我们可以将通用功能放在私有方法中,而不是公开使用。但是我们可以在这里有两种私有方法: private private static 使用private static方法是可以理解的,但是什么时候应该使用private方法呢?我们不在这里处理实例,因为这是一个接口,那么为什么private允许创建方法?我们不是只需要private static方法吗?
9 java  oop 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.