小编zhu*_*wei的帖子

如何在非 Web 应用程序中访问执行器端点

这不是一个 web 项目,但我仍然spring-boot-starter-actuator在 pom 中添加,并指定management.port=8081,然后在运行方法的最后一个CommandLineRunner,有以下代码,

System.in.read();
Run Code Online (Sandbox Code Playgroud)

当这个项目开始时,它会坚持下去。然后我将访问http://localhost:8081/configprops,但显示以下消息:

This webpage is not available
Run Code Online (Sandbox Code Playgroud)

那么如何在非 Web 应用程序中访问执行器端点呢?顺便说一句,我为什么要这样做,因为在启动我的项目时,它无法成功加载 yml 数据并导致 NPE。所以我想访问/configprops以检查它。

我的 yml 是这样的:

spring:
    profiles.active: default

---

spring:
    profiles: default

user: 
   foo: 
      aaa: aaa@foo.com
---

spring:
   profiles: test        

user: 
   foo: 
       aaa: aaa@foo.com
       bbb: bbb@foo.com

@ConfigurationProperties(prefix="user", locations="user.yml")
public class UserConfig {
    private HashMap<String, String> foo;    
}
Run Code Online (Sandbox Code Playgroud)

spring-boot

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

Java 8:将具有字符串值的映射转换为包含不同类型的列表

我有这个Map:

Map<Integer, Set<String>> map = ...
Run Code Online (Sandbox Code Playgroud)

我有这堂课Foo:

class Foo {
    int id;
    String name;
}
Run Code Online (Sandbox Code Playgroud)

我想将地图转换为List<Foo>.在Java 8中有一种方便的方式来做到这一点吗?

目前,我的方式是:

List<Foo> list = new ArrayList<>((int) map.values().flatMap(e->e.stream()).count()));

for(Integer id : map.keySet()){
    for(String name : map.get(id)){
        Foo foo = new Foo(id,name);
        list.add(foo);  
    }
}
Run Code Online (Sandbox Code Playgroud)

我觉得这太麻烦了.

java java-8 java-stream map-function

4
推荐指数
1
解决办法
182
查看次数

如何在Eclipse Open Resource结果列表中排除某些项目/路径?

这是一个maven项目,有一个父项目父项和一些子模块,例如foo,bar.

<modules>
    <module>foo</module>
    <module>bar</module>
    ...
</modules>
Run Code Online (Sandbox Code Playgroud)

现在在eclipse中我想搜索一个文件,例如FooService.java,我同时输入ctrl + shift + R,打开Open Resource 窗口,但是有很多FooService,例如

parent/foo/src/main/java/com/foo/service/
foo/src/main/java/com/foo/service/
Run Code Online (Sandbox Code Playgroud)

现在我想排除父选项如何在Eclipse中配置它?

eclipse

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

java8转换字符串数组来映射(奇数索引是键,偶数索引是值)

现在我有一个String数组,

String[] a= {"from","a@a.com","to","b@b.com","subject","hello b"};
Run Code Online (Sandbox Code Playgroud)

从命令行参数.

我想将它转换为Map,

{"from":"a@a.com","to":"b@b.com","subject":"hello b"}
Run Code Online (Sandbox Code Playgroud)

在java8中是否存在方便的方式来实现这一点?现在我的方式是

Map<String,String> map = new HashMap<>();
for (int i = 0; i < args.length; i+=2) {
    String key = args[i].replaceFirst("-+", ""); //-from --> from
    map.put(key, args[i+1]);
}
Run Code Online (Sandbox Code Playgroud)

java java-8

4
推荐指数
1
解决办法
1825
查看次数

spring boot可以显示sql甚至直接使用JdbcTemplate

spring boot项目,用过JdbcTemplate,想要显示执行的sql,配置如下

spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
Run Code Online (Sandbox Code Playgroud)

但没什么输出,看来上面的配置只支持spring data jpa,所以我想知道确实存在某种方式可以显示sql甚至JdbcTemplate直接使用?

jdbctemplate spring-boot

4
推荐指数
1
解决办法
6057
查看次数

为什么@Qualifier不起作用

我使用spring boot + jdbctemplate,我必须使用多数据源,例如

@Configuration
public class MultiDBConfig {

    @Bean(name = "fooDb")
    @ConfigurationProperties(prefix = "foo.datasource")
    public DataSource fooDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "fooJdbcTemplate")
    public JdbcTemplate fooJdbcTemplate(@Qualifier("fooDb") DataSource ds) {
        return new JdbcTemplate(ds);
    }

    @Bean(name = "barDb")
    @ConfigurationProperties(prefix = "bar.datasource")
    public DataSource barDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "barJdbcTemplate")
    public JdbcTemplate barJdbcTemplate(@Qualifier("barDb") DataSource ds) {
        return new JdbcTemplate(ds);
    }

}
Run Code Online (Sandbox Code Playgroud)

当我启动我的应用程序时,它失败并具有以下错误信息

Parameter 0 of method fooJdbcTemplate in com.example.multidatasourcedemo.MultiDBConfig required a single bean, but 3 were found:
    - fooDb: …
Run Code Online (Sandbox Code Playgroud)

spring-boot

4
推荐指数
1
解决办法
2494
查看次数

tcpreplay 不工作客户端未收到数据

在服务器中

\n\n
# nc -lp 2424\nhi server\nhi client\n1\n2\n3\n
Run Code Online (Sandbox Code Playgroud)\n\n

在客户端

\n\n
\xe2\x9e\x9c  ~ nc 139.224.xxx.xx 2424\nhi server\nhi client\n1\n2\n3\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后在客户端

\n\n
\xe2\x9e\x9c  ~ sudo tcpdump -i en0 -nn -s0 -v src port 2424 -c 10 -w 2424.pcap\ntcpdump: listening on en0, link-type EN10MB (Ethernet), capture size 262144 bytes\n10 packets captured\n93 packets received by filter\n0 packets dropped by kernel\n\n\xe2\x9e\x9c  ~ tcpdump -r 2424.pcap\nreading from file 2424.pcap, link-type EN10MB (Ethernet)\n16:49:47.874743 IP 139.224.xxx.xx.kofax-svr > 192.168.199.171.53511: Flags [P.], seq 2832846522:2832846524, ack 587632101, win 227, options …
Run Code Online (Sandbox Code Playgroud)

tcpdump netcat tcpreplay

4
推荐指数
1
解决办法
2444
查看次数

如何检查所使用的正在运行的 Java 进程的 Java 版本

我创建了一个使用 spring boot 的 web 项目并将其部署在远程服务器上,它的默认 JDK 是

 echo $JAVA_HOME
/usr/local/jdk1.7.0_72
Run Code Online (Sandbox Code Playgroud)

因为我在我的项目中使用了 java 8,所以在开始我的项目之前,我在命令下面明确执行

 export JAVA_HOME="/usr/local/jdk1.8.0_65"
Run Code Online (Sandbox Code Playgroud)

然后开始我的项目

./myapp.jar
Run Code Online (Sandbox Code Playgroud)

但是当我执行以下命令时

java -version
java version "1.7.0_72"
Java(TM) SE Runtime Environment (build 1.7.0_72-b14)
Java HotSpot(TM) 64-Bit Server VM (build 24.72-b04, mixed mode)
Run Code Online (Sandbox Code Playgroud)

我有点困惑,我不确定我的项目实际使用的是哪个jdk版本?那就是有一个java进程

jps -l
17429 /var/myapp.jar
Run Code Online (Sandbox Code Playgroud)

我怎么知道它使用的是哪个 Java 版本?

谢谢@frant.hartm

# ps aux | grep 17429
root     17429  0.4  6.7 5995260 1104984 pts/13 Sl  19:16   0:29 /usr/local/jdk1.8.0_65/bin/java -Dsun.misc.URLClassPath.disableJarChecking=true -Dserver.port=8081 -jar /var/myapp.jar

# jcmd 17429 VM.version
17429:
Java HotSpot(TM) 64-Bit Server VM version …
Run Code Online (Sandbox Code Playgroud)

jvm spring-boot

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

java8将Map <X,Y> + Map <Y,Z>转换为Map <X,Z>

Java8是否可以方便地实现以下要求,即

Map<X,Y> + Map<Y,Z> = Map<X,Z>
Run Code Online (Sandbox Code Playgroud)

现在我的代码是

ArrayList<String> couponCodes = newArrayList("aaa", "bbb", "ccc");
// couponCode -- shopId
ArrayList<ShopCoupon> shopCoupons = newArrayList(new ShopCoupon("aaa", 1), new ShopCoupon("bbb", 2), new ShopCoupon("ccc", 3));
Map<String, Integer> couponCodeShopIdMap = shopCoupons.stream().collect(toMap(sc -> sc.getCouponCode(), sc -> sc.getShopId()));
// shopId -- name
ArrayList<Shop> shops = newArrayList(new Shop(1, "zhangsan"), new Shop(2, "lisi"), new Shop(3, "wangwu"));
Map<Integer, String> shopIdNameMap = shops.stream().collect(toMap(s -> s.getId(), s -> s.getName()));

//couponCode -- name
Map<String, String> couponCodeNameMap = couponCodes.stream().collect(toMap(c -> c, c -> shopIdNameMap.get(couponCodeShopIdMap.get(c))));
System.out.println(couponCodeNameMap);
Run Code Online (Sandbox Code Playgroud)

我想知道实现这个要求是否更方便?

java java-8 java-stream

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

如何从 JSON 中获取最大值?

有一个这样的json文件:

[
{
    "createdAt": 1548729542000,
    "platform": "foo"
},
{
    "createdAt": 1548759398000,
    "platform": "foo"
},
{
    "createdAt": 1548912360000,
    "platform": "foo"
},
{
    "createdAt": 1548904550000,
    "platform": "bar"
}
]
Run Code Online (Sandbox Code Playgroud)

现在我想获得 foo 平台的最大 createdAt 吗?如何通过使用 jq 来实现它?

jq '.[] | select(.platform=="foo") | .createdAt | max' foo.json
jq: error (at <stdin>:17): number (1548729542000) and number (1548729542000) cannot be iterated over

jq '.[] | select(.platform=="foo") | max_by(.createdAt)' foo.json
jq: error (at <stdin>:17): Cannot index number with string "createdAt"
exit status 5
Run Code Online (Sandbox Code Playgroud)

json max jq

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