这不是一个 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) 我有这个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)
我觉得这太麻烦了.
这是一个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中配置它?
现在我有一个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) 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
直接使用?
我使用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) 在服务器中
\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) 我创建了一个使用 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) 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)
我想知道实现这个要求是否更方便?
有一个这样的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) spring-boot ×4
java ×3
java-8 ×3
java-stream ×2
eclipse ×1
jdbctemplate ×1
jq ×1
json ×1
jvm ×1
map-function ×1
max ×1
netcat ×1
tcpdump ×1
tcpreplay ×1