考虑以下Dockerfile:
FROM alpine:edge
EXPOSE \
# web portal
8080 \
# backdoor
8081
Run Code Online (Sandbox Code Playgroud)
像这样建造:
docker build .
Run Code Online (Sandbox Code Playgroud)
我们观察到这样的输出
Sending build context to Docker daemon 17.1TB
Step 1/2 : FROM alpine:edge
---> 7463224280b0
Step 2/2 : EXPOSE 8080 8081
---> Using cache
---> 7953f8df04d9
[WARNING]: Empty continuation line found in:
EXPOSE 8080 8081
[WARNING]: Empty continuation lines will become errors in a future release.
Successfully built 7953f8df04d9
Run Code Online (Sandbox Code Playgroud)
因此,鉴于将注释放在多行部分的中间很快就会变得非法:注释多行命令的新推荐方法是什么?
这对于RUN命令尤其重要,因为我们鼓励我们&&通过命令一起减少图像层.
不确定这是什么时候引入,但我目前在版本中遇到这个问题:
docker --version
Docker version 17.07.0-ce, …Run Code Online (Sandbox Code Playgroud) Spring Data JPA引入了一个很好的功能,"按示例查询"(QBE).您可以通过构建实体实例来表达搜索条件.
您不必编写JPQL.与使用存储库查询派生相比,它使用的"魔法"更少.语法很好.它可以防止普通存储库代码的爆炸.它很好地存在于重构中.
但是有一个问题:QBE只有在你可以部分构造一个对象时才有效.
这是我的实体:
@Entity
@Table(name="product")
data class Product(
@Id val id: String,
val city: String,
val shopName: String,
val productName: String,
val productVersion: Short
)
Run Code Online (Sandbox Code Playgroud)
这是我的存储库(空!这是关于QBE的一件好事):
@Repository
interface ProductRepository : JpaRepository<Product, String>
Run Code Online (Sandbox Code Playgroud)
以下是您将如何获取List<Product>- 在某些城市的某些商店销售的所有产品:
productRepository.findAll(Example.of(Product(city = "London", shopName="OkayTea")))
Run Code Online (Sandbox Code Playgroud)
或者至少,这就是我想要做的.有一个问题.这是不可能的构造此对象:
Product(city = "London", shopName="OkayTea")
Run Code Online (Sandbox Code Playgroud)
这是因为Product构造函数要求定义其所有字段.事实上:这就是我大多数时候都想要的.
Java中通常的折衷方案是:使用no-args构造函数构造实体,使所有内容都可变,不保证完成性.
是否有一个很好的Kotlin模式来解决这个问题:
不可否认,这些目标看起来完全相互矛盾.但也许有另一种方法来解决这个问题?
例如:也许我们可以制作一个模拟/代理对象,它似乎是一个产品,但没有相同的构造约束?
我想要实现的是:
我对此非常了解 - 前两点正在发挥作用.
我无法为我的Spring Boot应用程序使用完全默认的OAuth2设置,因为标准表名已经在我的数据库中使用(例如,我已经有一个"用户"表).
我手动构建了自己的JdbcTokenStore,JdbcClientDetailsService和JdbcAuthorizationCodeServices实例,将它们配置为使用我的数据库中的自定义表名,并设置我的应用程序以使用这些实例.
所以,这就是我到目前为止所拥有的.我可以要求持票人令牌:
# The `-u` switch provides the client ID & secret over HTTP Basic Auth
curl -u8fc9d384-619a-11e7-9fe6-246798c61721:9397ce6c-619a-11e7-9fe6-246798c61721 \
'http://localhost:8080/oauth/token' \
-d grant_type=password \
-d username=bob \
-d password=tom
Run Code Online (Sandbox Code Playgroud)
我收到了回复; 太好了!
{"access_token":"1ee9b381-e71a-4e2f-8782-54ab1ce4d140","token_type":"bearer","refresh_token":"8db897c7-03c6-4fc3-bf13-8b0296b41776","expires_in":26321,"scope":"read write"}
Run Code Online (Sandbox Code Playgroud)
现在我尝试使用该令牌:
curl 'http://localhost:8080/test' \
-H "Authorization: Bearer 1ee9b381-e71a-4e2f-8782-54ab1ce4d140"
Run Code Online (Sandbox Code Playgroud)
唉:
{
"timestamp":1499452163373,
"status":401,
"error":"Unauthorized",
"message":"Full authentication is required to access this resource",
"path":"/test"
}
Run Code Online (Sandbox Code Playgroud)
这意味着(在这种特殊情况下)它已经回归到匿名身份验证.如果我添加到我的HttpSecurity,您可以看到真正的错误.anonymous().disable():
{
"timestamp":1499452555312,
"status":401,
"error":"Unauthorized",
"message":"An Authentication …Run Code Online (Sandbox Code Playgroud) java spring-security kotlin spring-boot spring-security-oauth2
我在 Docker 容器中使用 Alpine Linux 3.7。
我正在apkDockerfile 中执行一些命令。
我已成功将我的依赖项固定到特定的主要版本:
apk add --no-cache \
'openssl<2' \
'freeradius<4' \
'freeradius-mysql<4'
Run Code Online (Sandbox Code Playgroud)
但该命令的确切行为对于该命令运行的时间(即构建 Docker 映像的时间)很敏感。apk add
在撰写本文时,这些限制已解决:
apk add --no-cache \
'openssl=1.0.2m-r0' \
'freeradius=3.0.15-r3' \
'freeradius-mysql=3.0.15-r3'
Run Code Online (Sandbox Code Playgroud)
如果我apk add 'dep<majver' 明年跑步,可能会得到不同的结果。
dep=ver)。'dep<majver'是优选的。诸如npm和 之类的包管理器yarn对此有一个很好的解决方案。版本锁定文件。
您将有两个受版本控制的文档:
'dep<majver'dep=ver满足您所有约束的特定解决方案。
'dep<majver'重新生成它。是否有某种 Alpine …
我构建了一个音频插件.我的目标.app和.component.
我动态链接到Brew安装的库,libfluidsynth.
我复制libfluidsynth到.app/ .component.
我曾经install_name_tool重新链接二进制文件指向捆绑libfluidsynth.
libfluidsynth取决于glib,gthread,intl.
我将这些库复制到捆绑包中,重新链接libfluidsynth以更喜欢捆绑的副本.
我也为这些库及其依赖项做了同样的事情.
这是一个快速查看看起来像:
ls /Users/me/git/juicysfplugin/Builds/MacOSX/build/Release/juicysfplugin.app/Contents/Frameworks
libfluidsynth.1.7.1.dylib
libglib-2.0.0.dylib
libgthread-2.0.0.dylib
libintl.8.dylib
libpcre.1.dylib
otool -L \
/Users/me/git/juicysfplugin/Builds/MacOSX/build/Release/juicysfplugin.app/Contents/MacOS/juicysfplugin \
/Users/me/git/juicysfplugin/Builds/MacOSX/build/Release/juicysfplugin.app/Contents/Frameworks/* \
| grep -vE '\t(/System/Library|/usr/lib)'
/Users/me/git/juicysfplugin/Builds/MacOSX/build/Release/juicysfplugin.app/Contents/MacOS/juicysfplugin:
@executable_path/../Frameworks/libfluidsynth.1.7.1.dylib (compatibility version 1.0.0, current version 1.7.1)
/Users/me/git/juicysfplugin/Builds/MacOSX/build/Release/juicysfplugin.app/Contents/Frameworks/libfluidsynth.1.7.1.dylib:
@loader_path/../Frameworks/libfluidsynth.1.dylib (compatibility version 1.0.0, current version 1.7.1)
@loader_path/../Frameworks/libgthread-2.0.0.dylib (compatibility version 5401.0.0, current version 5401.3.0)
@loader_path/../Frameworks/libglib-2.0.0.dylib (compatibility version 5401.0.0, current version …Run Code Online (Sandbox Code Playgroud) 标准库定义了数组的交换,std::pair如下所示:
template <class T, size_t N>
void swap(T (&a)[N],
T (&b)[N]) noexcept(noexcept(swap(*a, *b)));
template <class T1, class T2>
struct pair {
…
void swap(pair& p) noexcept(noexcept(swap(first, p.first)) &&
noexcept(swap(second, p.second)));
…
};
Run Code Online (Sandbox Code Playgroud)
有效的现代C++第14项说:
[...]它们是否
noexcept取决于noexcept条款中的表达方式noexcept.
给定两个阵列Widget,例如,交换它们是noexcept仅当在阵列中交换单独的元件是noexcept,即,如果用于交换Widget是noexcept.
即,反过来,确定其他互换,如一个用于数组的数组是否Widget是noexcept.
类似地,交换std::pair包含Widgets的两个对象noexcept是否取决于Widgets的交换是否为noexcept.
但是根据这个解释,我无法理解为什么有必要将呼叫嵌套为noexcept(noexcept(swap(*a, *b))).
如果目标是"交换两个数组应该noexcept像交换元素一样",为什么还noexcept(swap(*a, *b))不够?
这些不同的重载是 …
我在 root 下在我的网站上工作,我犯了一个 linux 用户可以做的最糟糕的事情:rm -R /*而不是rm -R ./*. 当我看到它花费了太长时间时,我已经停止了这个过程......我设法用 USB 密钥重新安装了 lubuntu,这是一个好主意还是有其他方法可以扭转这个大错误?
感谢任何答案
我们能够add/ remove元素List使用add()/ remove()方法而不创建看起来类似的另一个列表StringBuffer append().所以我认为List是可变的.谁能证实我的理解是正确的?如果有错,请用下面的代码说明
List<String> strList = new ArrayList<String>();
strList.add("abc");
strList.add("xyz");
Run Code Online (Sandbox Code Playgroud) java ×2
kotlin ×2
alpine-linux ×1
bash ×1
c++ ×1
docker ×1
dockerfile ×1
dyld ×1
dylib ×1
macos ×1
noexcept ×1
rm ×1
spring-boot ×1
ubuntu ×1